Лучшие практики обработки исключений базы данных [закрываются]

14
задан 10 revs, 2 users 96% 23 May 2017 в 12:04
поделиться

7 ответов

@aku: DRY хорош, но не всегда возможный. Проверка является одним из тех мест, поскольку у Вас будет три совершенно других и несвязанных места, где проверка не только возможна, но и абсолютно необходима: В UI, в бизнес-логике, и в базе данных.

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

нет никакого очевидного способа для объединения этих трех различных типов проверки в единственном компоненте.

существуют некоторые попытки, предпринятые для объединения сквозных обязанностей как проверка в инжекторах политики как P& P Блок приложений Инжекции политики группы , объединенный с их Блок приложений Проверки, но это все еще базирующийся код. Если у Вас есть проверка, это не находится в коде, все еще необходимо поддержать параллельную логику отдельно...

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

Существует одна уничтожающая причина проверить и на клиентском и на стороне базы данных, и это безопасность . Особенно, когда Вы начинаете использовать материал AJAX, hackable URL и другие вещи, которые делают Ваш сайт (в этом случае) более дружественным по отношению к пользователям и хакеры.

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

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

Вы хотите уменьшить ненужные прохождения в DB, так выполнение проверки в рамках приложения является хорошей практикой. Кроме того, это позволяет Вам обрабатывать ошибки данных, где является самым легким восстановиться с: около UI (ли в контроллере или на уровне UI для более простых приложений), где данные вводятся.

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

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

, Например, если у Вас есть веб-приложение MVC ASP.NET, у Вас есть три слоя (от нижней части до вершины): База данных, контроллер и UI (модель, контроллер и представление). Любым ошибкам, брошенным Вашим слоем данных, нужно позволить пузыриться в Ваш контроллер. На этом уровне Ваше приложение "знает" то, что пользователь пытается сделать и может правильно сообщить пользователю об ошибке, предложив различные способы обработать его. Попытка восстановить с этих ошибок на слое данных делает его намного тяжелее для знания то, что продолжается в контроллере. И, конечно, размещение бизнес-логики в UI не считают лучшей практикой.

TL; DR: Проверьте везде, обработайте ошибки проверки в прошлый ответственный момент.

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

Я пытаюсь проверить с обеих сторон. 1 правило, за которым я всегда следую, никогда не является доверительным входом от пользователя. После этого к он - заключение, у меня обычно будет некоторая проверка фронтэнда на форме/веб-странице, которая даже не позволит представление с неправильно сформированными данными. Это - тупой инструмент - значение, что можно проверять/анализировать значение, чтобы удостовериться, что поле даты содержит дату. Оттуда, я обычно позволяю своей бизнес-логике проверить относительно того, имеет ли ввод данных смысл в контексте с тем, как это было отправлено. Например, отправленная дата попадает в ожидаемый диапазон? Валюта оценивает отправленный, попадают в ожидаемый диапазон? Наконец, на стороне сервера, ограничения Внешнего ключа и Индексы могут зафиксировать любые ошибки, которые проскальзывают через, который будет пузыриться исключение DB как последнее прибежище, которое может быть обработано кодом приложения. Я использую этот метод, потому что он отфильтровывает как можно больше ошибок, прежде чем вызов DB будет вызван.

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

Инструмент объектно-реляционного отображения (ORM), как NHibernate (или еще лучше, ActiveRecord), может помочь Вам избежать большой проверки, позволив модели данных быть встроенным прямо в Ваш код как надлежащий класс C#. Можно избежать прохождений в базу данных также благодаря замечательным моделям кэширования и проверки, встроенным в платформу.

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

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

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

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

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

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