Я оцениваю шаблон 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);
}
Второй вариант на самом деле не вариант. «Создание сущности», которая на самом деле является бизнес-операцией, является обработка команд.
Вообще говоря, тот, кто отправляет команду, чей обработчик создает объект, должен отправить с ним идентификатор объекта. То, как генерируется личность, является лишь проблемой реализации.
Обычно обработчики команд либо делают то, что они должны делать, и ничего не возвращают (или ACK), либо бросают (или NAK).
Других решений пока нет …