Я щойно прочитав допис у блозі, який пояснює MVC з банківською аналогією. У мене є кілька місяців досвіду розробки веб-додатків з MVC (CakePHP), тому я отримую основи, але я почав бачити тему, яка змусила мене думати, що я приймаю хибний підхід до того, де я викладаю свою логіку:
- Товсті моделі, худі контролери
- Зберігайте якомога більше ділової логіки в моделях
У моєму додатку моделі анорексичні, а контролери страждають ожирінням. У мене вся бізнес-логіка в контролерах, і нічого, крім асоціацій та правил перевірки в моделях.
Скануючи свої контролери, я тепер можу визначити багато логіки, яка, ймовірно, повинна йти в моделі:
- Додаток має списки, які містять елементи, і елементи можна класифікувати. Логіка сортування, яка розміщує список у ранговому порядку, знаходиться в контролері.
- Подібно до елементів (модель товару) також є зображення (модель зображення). Кожен елемент може мати зображення за замовчуванням (позначене image_id у таблиці елементів). Коли елемент відображається із його зображеннями, зображення за замовчуванням має з’являтися першим. У мене є логіка, яка робить це в контролері.
- Коли відображається список, відповідні списки відображаються на бічній панелі. Логіка визначення списків, пов’язаних між собою, знаходиться в контролері.
Тепер до моїх запитань:
- З наведеними вище прикладами, чи я на правильному шляху, думаючи, що це екземпляри логіки в даний час у контролері, який належить до моделі?
- Які деякі інші логічні сфери, загальні для веб-програм, повинні входити в моделі?
- Я впевнений, що виявлення цієї проблеми та зміна дизайну - це половина успіху, але навіть якщо я вирішу взяти ті приклади, які я наводив вище, і спробувати перенести цю логіку на модель, я б не знав, з чого почати. Хто-небудь може направити мене у правильному напрямку, розмістивши тут якийсь код або посилаючись на якісні навчальні ресурси? Допомога у CakePHP була б чудовою, але я впевнений, що всього MVC буде достатньо.