Разработчики Zend Framework 3 являются большими фанатами разнообразных шаблонов проектирования. Хотя вам не нужно понимать шаблоны проектирования, чтобы читать эту книгу, в этой секции мы кратко перечислим основные шаблоны, на которых основан ZF3.
Модель-Вид-Контроллер (Model-View-Controller, MVC). Шаблон Model-View-Controller используется во всех современных PHP-фреймворках. В приложении MVC вы разделяете код на три категории: модели (ваша бизнес-логика), вид (презентация) и контроллеры (код, отвечающий за взаимодействие с пользователем). Такое разделение также называется separation of concerns. С MVC вы можете повторно использовать компоненты этой триады в других проектах. Также легко заменить любую часть триады. Например, вы можете легко заменить вид другим видом, без изменения бизнес-логики.
Проектирование на основе Предметной Области (Domain Driven Design, DDD) В Zend Framework 3 вы будете делить слой моделей еще глубже на сущности (entities), т.е. классы, работающие с таблицами БД, репозитарии (repositories), т.е. классы, позволяющие доставать сущности из БД, объекты-значения (value objects), т.е. классы моделей, не имеющие идентификатора, и сервисы (services), то есть классы, отвечающие за бизнес-логику. Дополнительно вы будете иметь веб-формы (forms), т.е. классы моделей, ответственные за ввод данных пользователя, помощники вида (view helpers), т.е. повторно используемые плагины, предназначенные для отображения различного контента на веб-странице, и, вероятно, другие типы моделей.
Шаблон Aspect Oriented Design. В ZF3 все основано на событиях (events). Когда пользователь запрашивает
веб-страницу, генерируется событие. Наблюдатель (observer) может реагировать на событие. Например,
компонент Zend\Router
разбирает URL на части и определяет, какой контроллер нужно вызвать. Когда событие
наконец достигает визуализатора (renderer), генерируется HTTP ответ, и пользователь видит результирующую
веб-страницу.
Шаблон Singleton. В ZF3 существует такой объект как менеджер сервисов (service manager), который является централизованным хранилищем всех сервисов, имеющихся в приложении. Каждый сервис существует только в одном экземпляре.
Шаблон Strategy. Стратегия - это всего лишь класс, инкапсулирующий какой-либо алгоритм. И вы можете использовать разные алгоритмы, если срабатывают определенные условия. Например, визуализатор (renderer) имеет несколько стратегий для визуализации веб-страницы (например, он может сгенерировать HTML-страницу, JSON-массив или RSS feed, основываясь на заголовках HTTP-запроса).
Шаблон Adapter. Адаптеры позволяют адаптировать класс общего назначения к конкретному случаю использования.
Например, компонент Zend\Db
предоставляет доступ к базе данных независимо от типа СУБД. Внутри себя,
он использует адаптеры для каждой поддерживаемой СУБД (SQLite, MySQL, PostgreSQL и т.д.)
Шаблон Factory. Вы можете создать экземпляр класса посредством оператора new
. Или вы можете
создать его с помощью фабрики. Фабрика - это всего лишь класс, занимающийся созданием других объектов.
Фабрики полезны, так как упрощают внедрение зависимостей (dependency injection). Это также упрощает
тестирование ваших моделей и контроллеров.