Архитектра MVC

Автор:Игорь Тельменко

Архитектра MVC

MVC - это вариант Многоуровневой архитектуры (Layered Architecture), архитектурный паттерн и парадигма, которая делит приложение на 3 основных слоя.

  • Модель (Model). Этот слой управляет всеми данными, логикой и бизнес правилами не зависимо от представления данных. Это сердце и душа MVC приложения. Слово "Модель" иногда вносит путаницу. В архитектуре MVC слой модели - это не одно и то же что модель Laravel.
  • Вид (View). Предоставляет различные представления слоя модели. Предоставляет способ вызывать изменения в состоянии модели.
  • Контроллер (Controller). Организует взаимодействие между слоями. Выполняет действия над моделью для обновления ее состояния. Отправляет сообщения в слой Вид (View) для изменения конкретного представления модели.

Примеры взяты с главы книги Domain-Driven Design in PHP (By Carlos Buenosvinos, Christian Soronellas, Keyvan Akbary).

Слой модели

Слой модели представлен таким способом.

Класс Post (представляет собой пост блога):

PostRepository (представляет собой всю коллекцию доступных постов):

PostService известен как Сервис приложения (Application Service), - это слой внутри слоя модели, который организует и координирует другие слои Модели. Никакой другой тип объекта не должен иметь возможность напрямую обращаться к другим слоям модели.

Таким обзразом здесь хорошо видно, насколько слой модели больше чем просто модель сущности в Laravel (или ином php фреймворке).

Вид

Вид может посылать и принимать сообщения из слоя модели (через контроллер) и контроллера. Его основная цель представить модель пользователю в пользовательском интерфейсе (UI). А также обновлять представление в интерфейсе при каждом обновдлении модели.

Вид обычно получает объект Data Transfer Object (DTO), в котором собирается все необходимое для отображения.

Здесь используется шаблонизатор Twig

Немного об использовании DTO вместо экземпляра класса представляющего модель. Для чего он нужен, если можно предоставить объект модели? Главной причиной этого служит Разделение проблем (Separation of Concerns). Если мы позволим Виду работать напрямую с Моделью, то тесно свяжем (см. тесное связывание) Вид и Модель. И изменение Модели потенциально сломает нам все Виды, которые работают с данной моделью.

Контроллер

Контроллер отвечает за координирование и организацию Модели и Вида. Он получает сообщения от вида и запускает изменения модели в соотвествии с текущим действием. И далее он оправляет сообщения Виду, чтобы тот отобразил представление модели.

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

Оставить ответ