Кращі практики MVC

Недивлячись на те, що MVC відомий практично кожному веб-розробнику, його використання у реальних проектах часто викликає труднощі. Головна ідея MVC — повторне використання коду та розділення проблем. У даному розділі будуть описані загальні принципи, які допоможуть слідувати MVC у вашому додатку.

Допустимо, що веб-додаток складається із декількох піддодатків, таких як

Піддодатки можуть бути реалізовані у вигляді модулів або як додаток, який містить код, загальний для декількох піддодатків.

Модель

Моделі представляють структури даних, які використовуться у додатку, і часто є спільними для кількох піддодатків. Наприклад, модель LoginForm може бути використана як у користувальницькій, так і у адміністративній частині додатку. Модель News може використовуватися консольними командами, API та front/back частинами додатку. Тому, моделі

Іноді слідування останньому перерахованому правилу робить модель дуже товстою, тобто вона містить дуже багато коду в одному класі. Це може призвести до труднощів підтримки коду у тому випадку, якщо модель використовується декількома способами. Приміром, модель News може містити метод getLatestNews, який використовується тільки користувальницькою частиною і метод getDeletedNews, який використовується тільки адміністративною частиною. Для невеликих та середніх додатків це припустимо. Для великих додатків з метою поліпшення підтримуваності коду можна зробити наступне:

Таким чином, якщо застосувати це до розглянутому вище прикладу, необхідно додати модель News із методом getLatestNews у користувальницьку частину та ще одну модель News із методом getDeletedNews у адміністративну частину.

У загальному випадку моделі не повинні безпосередньо взаємодіяти з користувачем. тобто:

Представлення

Представлення відповідають за відображення моделей у потрібному користувачу форматі. У загальному випадку представлення

Представлення можна використовувати повторно кількома способами:

Контролер

Контролери — сполучна ланка, яка поєднує моделі, представлення та інші компоненти у робочий додаток. Контролер відповідає за обробку запитів користувача. Тому контролер

У добре спроектованому MVC-додатку контролери зазвичай дуже тонкі та містять тільки декілька десятків рядків коду. У той же час, моделі дуже товсті та містять більшу частину коду, повʼязану із обробкою даних, так як структура даних та бізнес-логіка, які там міститься, зазвичай доволі специфічні для конкретного додатку. Логіка контролеру, навпаки, доволі типова та може бути винесена у базові класи.