В интернете по словам что в заголовке можно найти статейки, но у меня немного по другому.
Action, является реализацией паттерна команда, он не знает о Responder, но может взаимодействовать с Domain. А именно умеет получать Domain, настраивать его и выполнять какие-то действия связаные с ним, через сервисы или напрямую.
Domain - знает только о своих составных частях, обычно состоит из репозитория, сущностей. Отвечает за бизнесс-логику.
Responder - не знает о Action. Но может запрашивать Domain, при этом не может настраивать Domain и выполнять его команды (выполнять работу Action).
Это очень элегантная архитектура, но она очень тяжела для воспроизведения, так как требует дополнительных сил на реализацию сохранения состояния в системе.
Простейшая реализация
class Domain { protected $name; public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } } class Responder { public $domain; public function getContent() { return $this->domain->getName('ivan'); } } class Action { public $domain; public function execute() { $this->domain->setName('Ivan'); } } $domain = new Domain; $action = new Action; $action->domain = $domain; $action->execute(); $responder = new Responder; $responder->domain = $domain; echo $responder->getContent();
Основной плюс в отличии от MVC которую используют все популярные php фреймворки в том что контроллер не знает о представлении и вообще не интересуется им, а интересуется только моделью.
А почему это плюс?
ОтветитьУдалитьПотому что компоненты системы знают о себе меньше, что делает их более независимыми друг от друга, что в свою очередь увеличивает гибкость кода.
Удалить