Допустимое место для внедрения службы проекции для обработки объектов или событий домена

Я пытаюсь реализовать простой проект CQRS + ES, чтобы понять, как он должен работать. Библиотека Prooph слишком сложна и имеет слишком много опций.

Пока я понимаю, у меня должен быть CommandBus, который будет обрабатывать команды и выполнять логику домена. Я ввел мессенджер Symfony в контроллер, и он работает. Таким образом, совокупный корень создает событие и применяет его к модели предметной области. Затем обработчик команд имеет встроенный репозиторий, который сохраняет домен (сохраняет события домена). Но я не могу получить, как я должен обновить прогноз для этого домена.

Вот как выглядит обработчик команд

class CreateBudgetHandler
{

private $budgetRepository;

public function __construct(
BudgetRepository $budgetRepository
) {
$this->budgetRepository = $budgetRepository;
}

public function __invoke(
CreateBudgetCommand $command
) {
$budget = Budget::create(
new BudgetId(Uuid::uuid4()),
new Amount($command->getBudget()->getAmount()),
\DateTimeImmutable::createFromFormat('Y-m-d', $command->getBudget()->getStartDate()),
\DateTimeImmutable::createFromFormat('Y-m-d', $command->getBudget()->getEndDate())
);

$this->budgetRepository->save($budget);
}
}

Итак, он просто получает команду, вызывает именованный конструктор для модели предметной области (Budget::create) и передает его в хранилище, которое извлечет все записанные события и сохранит их в базе данных хранилища событий.

Мне интересно, это нормально, чтобы добавить другой репозиторий в обработчик команд, который будет сохранять объект модели домена в другую таблицу? Что-то вроде этого

$this->budgetProject->insert($budget);

insert Метод берет модель предметной области, читает записанные события, преобразует их в запросы INSERT / UPDATE / DELETE и запускает их.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]