Логическое исключение против технического исключения - PullRequest
1 голос
/ 20 февраля 2020

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

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

Вопрос в том, какой из вариантов предпочтительнее?

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

Рекомендуется проверять базу данных и не использовать ограничение вашей базы данных.

Ограничения базы данных должны рассматриваться как второй экран для обеспечения целостности данных. Но это не должно управлять вашей бизнес логикой c. Только ваше программное обеспечение управляет вашей деловой логикой c.

1 голос
/ 20 февраля 2020

Это зависит от вашего требования

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...