实现CQRS时如何在控制器中获取创建的对象
How to get the created object in controller when implementing CQRS
我正在评估 CQRS 模式,想知道在同一操作中获取命令创建的实体的最佳方式是什么,以便我可以在视图中呈现它。
我能想到的两个方案是。
1) 在controller中创建一个id,并通过命令发送它,通过id查找实体来获取实体。
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);
}
第二个选项不是真正的选项。 "Entity creation",其实是业务操作,是命令处理。
一般来说,发送命令的人,其处理程序创建实体的人,应该发送实体ID。以何种方式生成身份只是一个实现问题。
通常,命令处理程序要么做他们想做的事,return什么都不做(或 ACK),要么抛出(或 NAK)。
我正在评估 CQRS 模式,想知道在同一操作中获取命令创建的实体的最佳方式是什么,以便我可以在视图中呈现它。
我能想到的两个方案是。
1) 在controller中创建一个id,并通过命令发送它,通过id查找实体来获取实体。 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);
}
第二个选项不是真正的选项。 "Entity creation",其实是业务操作,是命令处理。
一般来说,发送命令的人,其处理程序创建实体的人,应该发送实体ID。以何种方式生成身份只是一个实现问题。
通常,命令处理程序要么做他们想做的事,return什么都不做(或 ACK),要么抛出(或 NAK)。