저는 현재 DDD in PHP 책에 대한 예측을 읽고 있는데, 나는 언제 어디에서 프로젝터 클래스의 register 메소드를 호출하는지 혼란 스럽습니다.DDD in PHP -> 프로젝터 -> 언제 어디서 등록기 메소드를 호출해야합니까?
흐름 : CreateNewTaskRequest -> CreateNewTaskService -> Task :: writeFromNew() -> PDOTaskRepository.
PDOTaskRepository의 저장 메서드가 끝나면 프로젝터의 프로젝트 메서드가 호출되고 지정된 도메인 이벤트를 수신하는 등록 된 모든 투영법의 프로젝트 메서드가 호출됩니다.
하지만 프로젝터에 투사를 언제 어디서 등록합니까?
class PDOTaskRepository implements TaskRepository
{
private $projector;
public function __construct(Projector $projector)
{
$this->projector = $projector;
}
public function save(Task $task)
{
// Code to save in DB
$this->projector->project($task->recordedEvents());
}
}
class Projector
{
/**
* @var Projection[]
*/
private $projections = [];
/**
* @param Projection[] $projections
*/
public function register(array $projections)
{
foreach ($projections as $projection) {
$this->projections[$projection->listensTo()] = $projection;
}
}
public function project(array $events)
{
foreach ($events as $event) {
if (isset($this->projections[get_class($event)])) {
$this->projections[get_class($event)]->project($event);
}
}
}
}
찾고있는 것은 pub/sub 패턴입니다. – Dariss
동기 투영입니까? – plalx
@plalx 예 동기화되었습니다. –