Где держать бизнес-логику приложения?

154
06 февраля 2019, 14:20

Только начал изучение шаблона MVC и сразу столкнулся с проблемой его понятия. Перечитал достаточно статей, но так и не нашел единого подхода. Вопрос: где именно необходимо хранить логику приложения, в моделях или контроллерах?

Answer 1

Из википедии: https://ru.wikipedia.org/wiki/Model-View-Controller Наиболее частые ошибки Начинающие программисты очень часто трактуют архитектурную модель MVC как пассивную модель[неизвестный термин] MVC: модель выступает исключительно совокупностью функций для доступа к данным, а контроллер содержит бизнес-логику. В результате — код моделей по факту является средством получения данных из СУБД, а контроллер — типичным модулем, наполненным бизнес-логикой. В результате такого понимания — MVC-разработчики стали писать код, который Pádraic Brady (известный в кругах сообщества «Zend Framework») охарактеризовал как «ТТУК» («Толстые, тупые, уродливые контроллеры»; Fat Stupid Ugly Controllers):

Среднестатистический ТТУК получал данные из БД (используя уровень абстракции базы данных, делая вид, что это модель) или манипулировал, проверял, записывал, а также передавал данные в Представление. Такой подход стал очень популярен потому, что использование таких контроллеров похоже на классическую практику использования отдельного php-файла для каждой страницы приложения.

— [http://blog.astrumfutura.com/2008/12/the-m-in-mvc-why-models-are-misunderstood-and-unappreciated/ The M in MVC: Why Models are Misunderstood and Unappreciated Но в объектно-ориентированном программировании используется[кем?] активная модель[неизвестный термин] MVC, где модель — это не только совокупность кода доступа к данным и СУБД, но и вся бизнес-логика; также, модели могут инкапсулировать в себе другие модели. Контроллеры же, — как элементы информационной системы, — ответственны лишь за:

приём запроса от пользователя; анализ запроса; выбор следующего действия системы, соответственно результатам анализа (например, передача запроса другим элементам системы). Только в этом случае контроллер становится «тонким» и выполняет исключительно функцию связующего звена (glue layer) между отдельными компонентами информационной системы.

READ ALSO
Проверка значений массива при autocomplete

Проверка значений массива при autocomplete

Есть такой обработчик autocomplete:

129
Зачем нужна ф-я save() в IdiORM

Зачем нужна ф-я save() в IdiORM

Изучаю idiorm и не могу понять зачем в примере на выборку используется функция save()

152
Количество ресурсов MODX [закрыт]

Количество ресурсов MODX [закрыт]

Сайт построен на MODXПодскажите, каким способом можно посчитать количество неудаленных ресурсов?

162
Не удается вывести данные из базы mysql

Не удается вывести данные из базы mysql

Не выводятся данные таблицы из бдПодскажите пожалуйста, что не так:

142