Как получить созданный объект в контроллере при реализации CQRS

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

Два варианта, которые я могу придумать:

1) Создайте идентификатор в контроллере и отправьте его с командой, чтобы получить объект, найдя его по идентификатору.
2) Создайте экземпляр объекта и отправьте его с помощью команды, чтобы у меня была ссылка на него после его заполнения.

Пример кода

public function createEntityAction(array $data) {
$eventDispatcher = $this->get('event_dispatcher');

$eventDispatcher->dispatch(
CreateEntityHandler::name, // Handler
new Entity($data) // Command
);

// Placeholder //
$entity = get-the-created-entity
// //

return $this->view($entity, Response::HTTP_OK);
}

1

Решение

Второй вариант на самом деле не вариант. «Создание сущности», которая на самом деле является бизнес-операцией, является обработка команд.

Вообще говоря, тот, кто отправляет команду, чей обработчик создает объект, должен отправить с ним идентификатор объекта. То, как генерируется личность, является лишь проблемой реализации.

Обычно обработчики команд либо делают то, что они должны делать, и ничего не возвращают (или ACK), либо бросают (или NAK).

1

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

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