在域模型中进行关联的方向

时间:2017-01-25 07:36:07

标签: oop design-patterns architecture uml domain-driven-design

是否有一些经验法则,在设计领域模型时,在哪个方向进行关联?

例如,我们在库存中有产品。产品的库存状态是一种相当复杂的数据结构,包含产品的多种变体的枚举,无论是在库存中,缺货还是可预订。因此,我们制作与产品相关的库存状态的单独对象。 现在的问题是,如果产品对象应该引用它的库存状态,或者库存状态具有对特定产品的引用

首先解决方案感觉,产品知道它的库存状态并不是真正关心的问题。产品只是一种产品,也许我们应该在不同的环境中操纵它们,而不需要放养。另一方面,作为根的股票状态感觉很尴尬,因为在考虑股票时,首先我们认为关于股票中的产品。

如何确定哪个实体充当关联的根?

3 个答案:

答案 0 :(得分:0)

您假设两个概念紧密耦合,这意味着它们属于同一个有界上下文。这意味着两种模型都相互依赖 - 这可能是您不想要的,因为它会导致您可能不想要的复杂性。毕竟,你自己提到了这一点:"产品知道它的库存状态"并不是产品的真正关注点。那么为什么要添加它的关系呢?

您可以将它们视为两个独立的有界上下文 - 它们之间没有直接关系,除了链接这两个概念的产品ID。

答案 1 :(得分:0)

导航是你应该忽略的东西,因为它纯粹是人为的东西。如果两件事情相关,他们就会彼此了解。行动和反应。重力。爱。努力寻找只在一个方向起作用的东西。敲诈。间谍镜子。

引入导航性确实只对实施阶段有意义。你试图分离东西以减少依赖性,现在是好的。而你在这里实际做的是将角色名称附加到导航。这反过来使箭头变得多余。

TL; DR;只是不要在UML建模中使用箭头。将它们留给Powerpoint League。

答案 2 :(得分:0)

  

首先解决方案感觉,产品知道它的库存状态并不是真正关心的问题。产品只是一种产品,也许我们应该在不同的环境中操纵它们,而不需要放养。另一方面,作为根的库存状态感觉很尴尬,因为在考虑库存时,首先我们考虑库存中的产品。

当我们考虑购物车时,我们考虑购物车中的产品。然而,大多数情况下,购物车物品的有用方法是参考产品。

我的猜测是你需要更多地考虑Stock,特别是它的生命周期;这两种不同想法的生命周期是如何紧密耦合的?如果您遇到单个Product与两个不同Stocks有关系的情况(过去一个,现在一个;此位置一个,该位置另一个),则存储该关系在产品中是不对的。