Я только что прочитал сообщение в блоге , которое объясняет MVC банковской аналогией. У меня есть несколько месяцев опыта в разработке веб-приложений с использованием инфраструктуры MVC (CakePHP), поэтому я получил основы, но я начал видеть тему, которая заставила меня думать, что я придерживаюсь некорректного подхода к тому, где я изложил свою логику:
- Толстые модели, тощие контроллеры
- Сохраняйте как можно больше бизнес-логики в моделях
В моем приложении модели нерегулярны, а контроллеры страдают ожирением. У меня есть вся бизнес-логика в контроллерах и ничего, кроме связей и правил проверки в моделях.
Сканируя мои контроллеры, я теперь могу определить много логики, которая, вероятно, должна идти в модели:
- Приложение имеет списки, которые содержат элементы, и элементы могут быть ранжированы. Логика сортировки, которая размещает список в ранжированном порядке, находится в контроллере.
- Аналогично, элементы (модель элемента) также имеют изображения (модель изображения). Каждый элемент может иметь изображение по умолчанию (обозначается как image_id в таблице элементов). Когда элемент отображается с его изображениями, изображение по умолчанию должно появляться первым. У меня есть логика, которая делает это в контроллере.
- Когда отображается список, связанные списки отображаются на боковой панели. Логика для определения того, какие списки связаны, находится в контроллере.
Теперь на мои вопросы:
- С примерами, которые я привел выше, я на правильном пути, думая, что это примеры логики в настоящее время в контроллере, который принадлежит модели?
- Какие еще области логики, общие для веб-приложений, должны использоваться в моделях?
- Я уверен, что выявить эту проблему и изменить мой шаблон проектирования - полдела, но даже если я решу взять те примеры, которые я привел выше, и попытаться перенести эту логику в модель, я не знаю, с чего начать , Может ли кто-нибудь указать мне правильное направление, разместив здесь некоторый код или ссылки на хорошие учебные ресурсы? Специальная помощь для CakePHP была бы полезна, но я уверен, что чего-нибудь MVC будет достаточно.