Я создал простое Java-приложение MVC, которое добавляет записи через формы данных в базу данных.
Мое приложение собирает данные, проверяет и сохраняет их. Это связано с тем, что данные поступают онлайн от разных пользователей. данные в основном числовые по своей природе.
Теперь, когда числовые данные хранятся в базе данных (сервер SQL), я хочу, чтобы мое приложение выполняло вычисления и отображало результаты. Пользователю не интересно, как выполняются вычисления, поэтому они должны быть инкапсулированы. Пользователь должен иметь возможность просматривать только простые вычисленные данные (например, данные столбца A минус данные столбца B, разделенные на данные столбца C). Я знаю, как написать хранимые процедуры для одного и того же, но я хочу трехуровневое приложение.
Я хочу, чтобы данные, которые я помещаю в базу данных в качестве записи, работали над ними, выполняя вычисления. Исходные данные должны оставаться неизменными, в то время как новые данные после вычислений должны храниться в виде новой записи объекта в базе данных.
Где я должен написать код для этого фонового расчета? Как это правила и бизнес-логика, я должен поместить это в новые файлы JavaBeans?
источник
Ответы:
Бизнес - логика должна быть помещена в модели , и мы должны стремиться к жира моделей и тощих контроллеров .
Для начала мы должны начать с логики контроллера. Например: при обновлении ваш контроллер должен направлять ваш код в метод / службу, которая доставляет ваши изменения в модель.
В этой модели мы можем легко создать вспомогательные / сервисные классы, в которых можно проверить бизнес-правила или расчеты приложения .
Концептуальное резюме
Контроллер предназначен для логики приложения. Логика, которая специфична для того, как ваше приложение хочет взаимодействовать с «областью знаний», которой оно принадлежит.
Модель для логики , которая не зависит от применения . Эта логика должна быть действительной во всех возможных применениях «области знаний», которой она принадлежит.
Таким образом, логично поместить все бизнес-правила в модель.
источник
The most common mistakes are to implement application logic operations inside the controller or the view(presentation) layer.
[ php-html.net/tutorials/model-view-controller-in-php ]Как всегда, это зависит от сложности проекта.
В тривиальных приложениях, где сложность модели предметной области относительно мала, вы можете поместить логику в модели и назвать это днем.
Однако для нетривиальных приложений со сложными моделями и множеством бизнес-правил лучше отделить вещи немного больше.
Если вы поместите в модель бизнес-логику, включающую более одной модели, вы введете тесную связь между этими моделями. Поскольку приложения продолжают расти, эти модели имеют тенденцию превращаться в
god models
, зная слишком много. И это быстро превратится в большой беспорядок, который трудно проверить и поддерживать. Так что в этом случае полезно поместить логику в отдельный слой.Принимая решение об абстракции, всегда принимайте во внимание сложность и цели вашего приложения и избегайте чрезмерного проектирования. Для простых / небольших приложений введение большего количества слоев, чем необходимо, увеличивает сложность, а не уменьшает ее.
У Роберта Мартина (дядя Боб) есть хорошая запись в блоге на эту тему: Чистая Архитектура.
источник
The controller interprets the mouse and keyboard inputs from the user, commanding the model and/or the view to change as appropriate
. Это определение адаптера.Внедрение бизнес-логики в модель может показаться лучшим вариантом. Контроллер получает вызов от удаленного веб-приложения. Контроллер веб-службы MVC принимает вызов и перенаправляет выполнение методу в BL. Теперь Business Logic может содержаться в «Model», но также может располагаться в какой-то другой папке, например, «Business Logic» . Так что нет строгого правила относительно того, где будет бизнес-логика.
Я использовал веб-сервис, построенный на MVC 3.0, а контейнер бизнес-логики - это MVC MODEL .
источник