Лучшие практики MVC

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

Предположим, что веб-приложение состоит из нескольких подприложений, таких как:

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

Модель

Модели представляют внутреннюю структуру данных приложения. Они часто являются общими для нескольких подприложений. Например, модель LoginForm может быть использована как в пользовательской, так и в административной части приложения. Модель News может использоваться консольными командами, API и front/back частями приложения. Поэтому модели

Иногда следование последнему правилу делает модель очень толстой, то есть содержащей очень много кода в одном классе. Это может привести к трудностям поддержки кода в том случае, если модель используется для выполнения различных задач. К примеру, модель News может содержать метод getLatestNews, который используется только пользовательской частью и метод getDeletedNews, который используется только административной частью. Для небольших и средних приложений это допустимо. Для крупных же приложений в целях упрощения дальнейшей поддержки кода можно сделать следующее:

Таким образом, если применить это к рассмотренному выше примеру, необходимо добавить модель News с методом getLatestNews в пользовательскую часть и ещё одну модель News с методом getDeletedNews в административную часть.

В общем случае, модели не должны напрямую взаимодействовать с пользователем. То есть:

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

Представления отвечают за отображение моделей в необходимом пользователю формате. В общем случае представления

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

Контроллер

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

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