当几个值对象相互依赖时,如何构造类,应用业务规则?

时间:2016-06-23 10:55:42

标签: domain-driven-design

基本上我有两个价值对象,每个都代表价格。规则去一个价格不能大于其他。可能存在仅指定其中一个的情况。

如何执行此规则以及在哪里?保留两个独立的物体,当一个物体被构造时,传递给它的另一个听起来有点奇怪,因为反向规则必须应用于其他。我不想将这两个值都保存在一个对象中,因为当我使用这些值时,我不需要将它们耦合。

2 个答案:

答案 0 :(得分:0)

价值对象很少独立存在,通常在负责强制执行不变量的实体内汇总。

  

"我不想将这两个值保留在一个对象中,因为我不需要   当我使用这些值"

时,它们会被耦合

如果存在跨越这些值的业务规则,那么它们可能应该是同一聚合的一部分。这些值本身不会直接耦合到另一个,但聚合将保持两者。

答案 1 :(得分:0)

  

规则去一个价格不能大于其他。可能存在仅指定其中一个的情况。

如果这两个价格真的一起变化并像price-from / price-to一样变化,那么也可以使用PriceRange值对象来检查这些规则。

public class PriceRange
{
    public PriceRange(Price from, Price to)
    {
        // Check all rules here
        From = from;
        To = to;
    }

    public Price From { get; }
    public Price To { get; }
}

检查聚合根中的规则可能更好

  • 如果AR州执行价格规则
  • 如果这两个价格单独变化