Domain driven design 将业务流程更改为“;“转让”;一对多协会
领域介绍 我有一个推销员。推销员得到商机。在我的领域里,这两者都是有意义的 有两种方法对此进行建模:Domain driven design 将业务流程更改为“;“转让”;一对多协会,domain-driven-design,cqrs,event-sourcing,Domain Driven Design,Cqrs,Event Sourcing,领域介绍 我有一个推销员。推销员得到商机。在我的领域里,这两者都是有意义的 有两种方法对此进行建模: 销售人员不知道其业务机会,或 销售人员知道他的机会列表(当然使用OpportunityId) 我相信,一个商机总是需要知道它的推销员 问题 我计划使用process Manager模式实现一个业务流程。这是一个“转移所有商机”的过程。这意味着抓住一个销售人员,并将他/她的所有机会“转移”给另一个销售人员 我们应该怎么做?我们应该如何对域进行建模 如果我们将其建模为一个双向关联,我可以想到一个进程
再次感谢。元答案:你需要读一下格雷格·杨的话。您将能够更好地与领域专家探讨您的需求 如果我们只有单向关联,我不知道该怎么做,因为我们需要借助read模型来获得商业机会列表 从读取模型中提取数据应该是您的第一选择。有什么问题吗 基本轮廓
- 写入模型从命令(而不是读取模型)获取所需的集合数据
我还没有看到一个企业关心这两种实现之间区别的例子;后一种实现更容易预测(您不需要知道任何关于读取模型的状态,只需要知道聚合的状态和命令的状态) 谢谢@VoiceOfUnreason这很有见地。在一个命令处理程序中对多个bo-ar执行$repository->save($bo)可以吗?我一直试图保持它的简单性,每个命令处理程序只执行一个AR/事务。在一个命令处理程序中查询读取模型并循环所有BO会很方便,并将每个BO持久化。否则,我会做大量的消息传递/倾听来处理业务流程(无论如何,这都在同一个BC中)。想法?“您觉得在一个命令处理程序中对多个bo执行$repository->save($bo)可以吗?”不——如果引入的争用是可接受的,为什么这些东西是单独聚合的?当我查询读取模型时,我会得到一个列表,例如,20个BusinessOpportunityID。这些需要被传输,所以我可以做一个fat命令,上面写着“传输(BoList,othersaller)”,这将需要对每个单独的聚合进行20次更新。或者我应该发出20个命令,每个命令有一个AR?i、 例如,“transfer(BO,othersaller)”x20?对负责执行不变量的每个聚合执行一个命令。否则,您会遇到一个(或多个)BusinessOpportunities拒绝转移的问题(这真的很可疑——这个问题/问题是否试图向您暗示您的域模型是错误的?)