实现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)。