Сведения о вопросе

Henry

10:04, 17th August, 2020

Бизнес-логика в конроллере или модели?

Просмотров: 419   Ответов: 9

Возник такой спор с коллегами, где же правильно размещать логику приложения.



Что можете подсказать?



  Сведения об ответе

screen

12:51, 29th August, 2020

Как и в любом религиозном споре, тут нет одного правильного ответа. Существует два подхода к этому вопросу: толстые контроллеры и тонкие модели, и наоборот. В первом случае, как нетрудно догадаться, бизнес-логика располагается в контроллерах, во втором — в моделях.

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

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


  Сведения об ответе

VERSUION

03:35, 16th August, 2020

Не знаю как правильно, но я размещаю так:
— логика приложения (она же системная): роутинг, логи, проверка параметров, прав, сохранение и получение данных (вызов всяких load и save), обработка форм, выбор способа отображения (html, xml, json, редиректы, ...), кэширование и т. п. — контроллеры (включая фронтконтроллер)
— логика модели (она же бизнес-логика): действия с данными без учёта их способа хранения (выставить или оплатить счёт, атаковать кого-то или построить здание) — как не странно, модели
— логика отображения: вывести сообщения системы (если они есть, формируются в контроллерах) раскрасить по разному чётные и не чётные строки таблицы, вывести дополнительные блоки (как правило для сайд-баров через вызов других контроллеров) — отображения (шаблоны)

То есть получается, что в модели сосредоточен код, который ничего не знает ни о http-запросах и ответах, ни о БД (или другом способе хранения). Контроллеры просто создают объекты модели, заполняют их, если нужно, данными из хранилища/запроса, вызывает, если требуется, методы модели, и если состояние объектов модели изменилось сохраняет их, после чего передаёт объекты в нужное отображение. Если приложение простое (только CRUD действия), то в модели вообще нет методов, кроме геттеров/сеттеров/делетеров (а иногда и их нет, только данные)


  Сведения об ответе

ASSembler

10:23, 8th August, 2020

«логику приложения» — это, скорей всего, конроллер. Не принято называть «логикой», хоть она таковой и является, логику хранения и отображения (паттерн MVC). Так что мой ответ в конроллере, а прочее не логика.


  Сведения об ответе

padenie

20:01, 21st August, 2020

Где должна быть логика, наглядно иллюстрирует классическая схема:


  Сведения об ответе

VERSUION

13:55, 9th August, 2020

В подлиннике примерно так — «архитектура MVC позволяет отделить бизнес-логику от представления». Модель и поведение вместе составляют бизнес-логику.
Модель иногда приравнивают к данным, это в корне неверно. В модель заложена логика для доступа к данным. Состояние модели — это состояние приложения.


  Сведения об ответе

fo_I_K

15:00, 25th August, 2020

бизнес-логика — в домене


  Сведения об ответе

#hash

22:04, 25th August, 2020

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


  Сведения об ответе

ITSME

13:27, 5th August, 2020

Строго говоря, бизнес-логика это и управляющая логика контроллеров, и функциональная логика моделей, и эргономическая логика представления. Исходя из этого и надо «разбрасывать» код — по контроллерам, моделям и отображениям.


  Сведения об ответе

fo_I_K

05:41, 18th August, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться