[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Action-Domain-Responder
chee
ExampleCMS развивается, хочу поделиться своим соображениями по поводу архитектуры, которые я начал в ней использрвать.

В интернете по словам что в заголовке можно найти статейки, но у меня немного по другому.

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 фреймворки в том что контроллер не знает о представлении и вообще не интересуется им, а интересуется только моделью.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.