php - 实现CQRS时如何在 Controller 中获取创建的对象

标签 php cqrs

我正在评估 CQRS 模式,想知道在同一操作中获取由命令创建的实体的最佳方法是什么,以便我可以在 View 中呈现它。

我能想到的两个选项是。

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);    
}

最佳答案

第二个选项不是真正的选项。 “实体创建”,其实是一种业务操作,是一种命令处理。

一般来说,发送命令的人,其处理程序创建了一个实体,应该连同实体 ID 一起发送。以何种方式生成身份只是一个实现问题。

通常,命令处理程序要么执行它们应该执行的操作并且不返回任何内容(或 ACK),要么抛出(或 NAK)。

关于php - 实现CQRS时如何在 Controller 中获取创建的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47871576/

相关文章:

php - 使用 PHP 打印 MySQL 数据库中的元素作为相应图像的链接

php - ZF2 "Unable to render template"Zend 在错误的目录中查找

php - SilverStripe 覆盖 URLSegmentFilter 静态

php - 是否可以选择数据库中的两个表?

cqrs - 是否可以在没有 Axon Server Enterprise 的情况下扩展 Axon Framework

cqrs - 事件溯源和字典对象

php 在表单中显示信息

domain-driven-design - 事件溯源重构

c# - 减少/删除 ASP.NET Core 中重复的业务逻辑检查

sql-server - 具有事件源的 CQRS 模式具有用于读/写的单个数据库