Хорошее место проверки для бизнес-логики - PullRequest
1 голос
/ 30 декабря 2011

ОК, так что давайте начнем с самого начала.Например, я разрабатываю какой-то большой проект.Для всех нас не секрет, что в таких проектах много общей логики.Скажем, например, что в каком-то заказе интернет-магазина должно быть несколько товаров, а сумма цен всех товаров должна быть ровно 1000. Итак, я реализую эту логику в веб-приложении MVC3 и проверяю заказ.Если есть проблемы, он сообщит пользователю о проблемах и попросит его опубликовать форму.

Но у проекта есть еще одна важная часть.Это БД.Здесь я также могу обернуть эту логику проверки в некоторую хранимую процедуру и добавлять заказы только через этот процесс, чтобы быть уверенным, что нет несоответствий.(Или я должен использовать проверки на столе, чтобы быть уверенным?)

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

Я уверен, что более опытные ребята имеют полное и элегантное решение для этого вопроса.

Итак, как я могу реализовать логику только в одном месте?

1 Ответ

2 голосов
/ 30 декабря 2011

Простой ответ, не всем по вкусу

  • Ваша база данных переживет ваш клиентский код
  • У вас будет несколько клиентских баз кода для вашей базы данных
  • Это обычночтобы иметь проверку в нескольких местах: будете ли вы доверять пользовательскому вводу из браузера и пропустите проверку на стороне сервера?
  • Определите «проверку»: сложные бизнес-правила или целостность данных?Если последнее, то это должна быть ответственность СУБД

Edit, о последней части

Не вся логика должна быть реализована в базе данных: только логика, которая будет общейдо нескольких клиентских кодовых баз.Или вы можете направить эти общие запросы через отдельный уровень / службу, которая им занимается.

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

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