Синхронизация таблиц ссылочной целостности и перечислений

Класс Guava Throwables

Если у вас есть фактический Throwable экземпляр, Google Guava предоставляет Throwables.getStackTraceAsString() .

Пример:

String s = Throwables.getStackTraceAsString ( myException ) ;

5
задан devuxer 4 January 2010 в 04:38
поделиться

6 ответов

Для таких довольно тривиальных вещей я обычно использую перечисление. Я могу отождествить себя с вами в том смысле, что считаю это не совсем правильным ... но, на мой взгляд, это меньшее из двух зол.

Некоторое дополнительное оправдание для этого: если по какой-то причине было добавлено четвертое значение, ваш код в любом случае потребует обновления, чтобы иметь возможность справиться с этим. Пока вы это делаете, очень легко также обновить перечисление.

3
ответ дан 14 December 2019 в 13:43
поделиться

В случае, если вам нужно добавить новое значение в таблицу, потребует ли это изменение кодировки в вашем приложении для поддержки этого нового значения? Если это так, сделайте его перечислением .

1
ответ дан 14 December 2019 в 13:43
поделиться

В зависимости от вашей базы данных вы можете сделать поле видимости нумерованным типом. Таким образом, данные должны быть одним из параметров, которые вы указали при создании таблицы.

1
ответ дан 14 December 2019 в 13:43
поделиться

Если вам нужно выполнить код ветвления в вашем приложении на основе значений в этой таблице, вы захотите представить эту таблицу в виде перечисления. Если нет, то можно сделать просто еще один класс.

Вот здесь-то и пригодится генерация кода - если вы используете что-то, что может генерировать таблицу в качестве перечисления, вам не придется думать о синхронизации таблицы и перечисления - просто добавьте свои строки в таблицу, и в следующий раз, когда вы создадите свой бизнес-уровень, перечисление обновится само.

1
ответ дан 14 December 2019 в 13:43
поделиться

Если у вас есть бизнес-логика, основанная на перечислении, ваш основной вариант - синхронизировать, а затем вручную. Если эти строки также являются внешними ключами для другой таблицы (скажем, у вас есть таблица поиска статусов), вам следует сделать тип идентификатора обычным int с уникальным индексом вместо идентификатора, чтобы вы могли легко поддерживать пары идентификаторов / значений то же самое, если у вас есть базы данных в разных средах.

0
ответ дан 14 December 2019 в 13:43
поделиться

В отличие от ответа Скотта Айви, я предпочитаю (но редко использую) подход, при котором я поддерживаю только перечисления, а при запуске приложения (или, возможно, при событии сборки) использую Reflection, чтобы убедиться, что значения таблицы совпадают с моими значениями перечислений. Это не требует генерации кода, но подвержено позднему обнаружению нарушений ограничений на ссылки.

.
0
ответ дан 14 December 2019 в 13:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: