PHP подкаст #13

Command паттерн, HAL для API, Varnish и Си спешит на помощь.

Скачать mp3 (27Мб)

Command паттерн используется для абстрагирования от технических деталей в пользу бизнес логики. Команду можно формировать из HTTP запроса, введенных данных в CLI и т.д. Команда содержит все необходимые данные для её обработки. Command Bus паттерн также способствует упрощению кода путем инкапсуляции:

  • Бизнес-логика перемещается в специальные хэндлеры и становится независимой от фреймворка (разлепляемся с реквестом, например).
  • Тонкий контроллер.
  • Упрощается тестирование.
  • Меньше дублирования кода.
  • Пространство для маневра за счет middleware (Decoration / Chain of responsibility).
  • Восстановление состояния системы за счет выполнения залогированных ранее команд.

Использование Command Bus особенно удобно в присутствии Service Layer, что предполагает скорее крупное приложение, чем небольшое. Часто — но не обязательно — мы говорим о Command Bus в контексте CQRS. Другим преимуществом Command Bus является разделение вызова и обработчика, что способствует последующему масштабированию — обработчик команды можно вынести за периметр приложения. Этот паттерн в некотором смысле также гарантирует перетекание ненужных зависимостей от фреймворка в бизнес-логику.

Реализаций командных шин предостаточно. Самые популярные:

Команда (Command) — это как правило объект с публичным атрибутами, своеобразный DTO. Здесь гармонично смотрятся get/set-методы. В командный объект целесообразно, например, мэпить реквест посредством форм-компонента или путем десериализации. Читать далее PHP подкаст #13