域名简介
我有一个推销员。推销员获得BusinessOpportunity。在我的域名中,两者都是ARs。
有两种方法可以对此进行建模:
我相信,BusinessOpportunity总是需要知道它的SalesmanId。
问题
我有一个业务流程,我计划使用Process Manager模式实现。这是一个“TransferAllBusinessOpportunities”流程。这意味着需要1个推销员并将他/她的所有机会“转移”给另一个。
我们该怎么做?我们应该如何对域进行建模?
如果我们将其建模为双向关联,我可以想到一个进程状态机,但它非常复杂。如果我们只有单向关联,我不知道怎么做,因为我们需要求助于读取模型来获取转移的商机列表,我担心我们应该保留所有内容侧模型。你怎么看待这个?
非常感谢任何帮助。附上下图,以帮助可视化是否有帮助。
快速总结问题:
再次感谢。
答案 0 :(得分:3)
元答案:你需要阅读Greg Young对set validation所说的内容。您可以更好地与领域专家探讨您的要求。
如果我们只有单向关联,我不知道如何做,因为我们需要求助于阅读模型来获取商机列表
从读取模型中提取数据应该是您的第一手段。问题是什么?
基本大纲
第一个度假胜地不能满足您的要求,但它是思考用例的良好起点。如果实现这种简单方法可能会出现什么问题?这些问题会给企业带来什么损失?
另外:我说过上面的表扬,但可能不是。你没有描述的一件事是这个模型的哪个部分决定"转移。是否允许模型拒绝转移机会的命令?在什么情况下?哪个聚合包含确定是否允许转移的状态?
可能是转移不是被描述为一个命令,而是一个事件,描述了某个人类销售经理做出的决定。
我担心我们应该把所有内容都保留在写入端模型中
也许。是否存在需要状态集的业务不变量?到目前为止,它听起来并不像它,这强烈暗示该集合不属于写入模型。您希望尽可能地删除聚合,而不会失去强制执行不变量的能力。
在命令处理程序中使用读取模型来执行业务流程是否可以?
好吗"?从我在不同地方读到的内容来看,很多人都这么认为。就我个人而言,我并不相信。粗略地说,你正在看两个大纲
VS
我还没有看到一个例子,企业会关心这两种实现之间的区别;后一种实现更容易预测(您不需要了解读取模型的状态,只需要了解聚合的状态和命令的状态)。