【问题标题】:CQRS : Where are my aggregate roots?CQRS:我的聚合根在哪里?
【发布时间】:2014-11-15 22:36:54
【问题描述】:

我有一个用于巴士运营商和运输产品的后台配置系统(目前面向 CRUD)。 我需要执行审计并跟踪所有配置参数的历史记录。
我认为 CQRS 方法可以满足我的需求。但我不知道如何为我的域建模? 如何识别我的根聚合?

系统允许运输网络管理员定义可销售运输产品的清单。 该系统允许运输网络管理员定义将在其产品运输中出售的媒体特征(卡、徽章、票证和设计......)。 网络可以授予在其他运营商上销售或验证其各自产品的权利。 网络由一个或多个销售产品或在其总线线路上进行网络传输的运营商运营。 操作员必须管理其设备/机器(总线、avm)。 操作员还决定应该发送到特定设备软件的产品列表。

当操作员配置了要发送到他的设备的参数列表时,他启动了一个进程,该进程将在 FTP 站点上提供描述所做设置/配置的各种文件 由运营商和其他网络管理员(在网络之间销售产品和/验证的权利列表......)。

系统必须允许审核服务器 TEST 上的所有更改和转置设置。

我想我有: - 产品聚合根:具有其属性、价格等......但是作为产品可以被其他聚合引用,我如何处理更改,例如当产品从产品目录中被驱逐时? - 每个用例的聚合根?

就像我说我不确定: - 如果 CQRS 方法真的适合? - 如果是,我如何指定我的聚合?

【问题讨论】:

    标签: cqrs event-sourcing


    【解决方案1】:

    哇,这是个大问题。我认为 CQRS 和事件溯源非常适合,尤其是在您需要审核日志的情况下。但是,您可以通过 CRUD 进行事件溯源。我在博客上有一个例子,你可以在这里找到 Is a 100% Provable Audit Log Possible? – Hint, with Event Sourcing it Is and I’ll Show You How

    找到你的聚合是一部分过程和一部分艺术形式。聚合的作用是封装“有界上下文”并确保维护不变量。您可以使用不变量来帮助您找到聚合。在不知道您的域的详细信息的情况下,很难建议存在哪些聚合。我在我的博客here 上再次详细介绍了如何构建聚合(一旦你弄清楚了它们应该封装什么)。希望对您有所帮助!

    【讨论】:

    • 感谢您的回复。我看了你的博客,很享受。我仍然对事件采购而不是 crud 有一些疑问。例如,在您的博客文章“使用 CQRS 和事件溯源时如何构建主详细信息视图”中,如果我们需要将数据批量导入数据库(新客户或在离线桌面办公室手工制作的订单或其他任何东西...... )?当使用经典的 CRUD 方法看起来很容易时,我们是否必须为所有可能的场景编写维护脚本?
    猜你喜欢
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-02
    • 2018-09-13
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    相关资源
    最近更新 更多