Domain driven design 复杂的聚集体-哪些是根?
构建复杂的制造管理系统。我有几十个实体,其中一些似乎有意义,而另一些显然没有 请允许我按重要性顺序列出各种实体:Domain driven design 复杂的聚集体-哪些是根?,domain-driven-design,aggregateroot,Domain Driven Design,Aggregateroot,构建复杂的制造管理系统。我有几十个实体,其中一些似乎有意义,而另一些显然没有 请允许我按重要性顺序列出各种实体: 工单 引述 发票 保证书 认证 不合格 船运 串行日志 赛洛格 序列 返工 消耗品 RepairLineItem 这些只是一些问题,但与我的问题最相关 所有这些(发票除外)仅与工作订单(TrackingID)相关 工单可以不存在任何不符合项、保修等,唯一的例外是顺序-工单必须至少有一个顺序 返工将聚合它自己的序列集合,在事实发生后创建的序列必须属于返工 工作订单可能没有报价单,但报价
selectAllConsumablesForWorkOrder()
selectAllRepairItemsForWorkOrder()
selectAllCertificationsForWorkOrder()
我的问题是,考虑到上述场景和需求,我如何在执行这些不变规则的同时使用较小的聚合根?如果所有内容都由WorkOrder/AR封装,我可以看到如何轻松实施上述要求
我对DDD的理解还远远不够完美,所以请温柔一点:)
可能我对AR的所有内容都有错误的印象,但我读过的大多数文章似乎都建议使用产品和多行项目示例。这实际上就是这个工作单,但每个行项目可能被其他集合共享
任何经验或意见都值得赞赏
问候,,
Alex一些ddd标记的问题很难回答,因为它们是特定于领域的。老实说,我不完全理解WorkOr序域,但是一般来说,如果你想使用更小的集合,你可以考虑DeMeNevices。 您可以发布一个DomainEvent,它表示在有界上下文中实际发生的某些事情,如 创建返工(聚合)时,发布一个返工CreateDevent,其中包含跟踪ID和序列(可以是值对象)。ReworkCreateDevenHandler负责更新相应的工作订单(聚合),然后发布一份工作订单完成时间重新估计文件,通知以下步骤 根据不变量,可以同步或异步处理事件。您需要与您的领域专家讨论这些问题 我认为使用较小的聚合是一个昂贵的决定,您需要优秀的领域专家和一些优秀的基础设施