私は現在、書籍0からの予測について読んでおり、プロジェクタクラスから登録メソッドを呼び出すタイミングと場所を混同しています。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);
}
}
}
}
あなたが探しているものは、パブ/サブパターンです。 – Dariss
これらの同期投影法はありますか? – plalx
@plalxはいそれは同期的です –