域模型中域对象的集合

时间:2009-12-14 19:09:50

标签: domain-driven-design

这可能是一个基本问题,但我对DDD很新。 我有一个域对象,我们称之为adjust,可以从UI批量处理。在我们处理调整之前,我们需要验证将应用这些调整的日期。我的问题在于我的域对象中的IsValidDate()方法的位置。

  1. 它应该是adjust类中的静态方法吗?
  2. 它应该是AdjustmentService类的一部分吗?
  3. 我应该创建一个AdjustmentsGroup域对象来包含一组调整,还会实现IsValidDate吗?
  4. 我倾向于认为第三个选项是最好的选项,但我很难想到一组调整对象的域名。是否可以为此类场景“强制”容器类型域对象?是否有一种常见的做法来处理这个问题?

    谢谢

    编辑:IsValidDate实际上包含业务逻辑。这不仅仅是一个简单的日期验证方法

3 个答案:

答案 0 :(得分:2)

我会投票2)将其设为 DomainService 。实现它的代码可以在DomainServices类,AdjustmentServices类或ValidateAdjustmentService类中,具体取决于域模型中的其他服务,以及从组织角度来看最有意义的内容。

另一种选择(如果此服务实施的规则是业务规则)是将其实现为规范。 (查看DDD中的第224-240页)

答案 1 :(得分:1)

如果您正在进行简单的is-this-a-date-a-date字符串验证,那么在我看来,该方法的正确位置是在Service类中,正如Charles建议的那样。

但是,如果Adjustment或AdjustmentCollection对象中的数据可以更改日期验证逻辑,例如不允许某些日期范围,该方法属于该对象。

答案 2 :(得分:1)

我赞成第3个选项,但是在adjust上创建一个更通用的函数,比如Validate(),它会返回错误/验证错误的集合。这样,您可以在以后添加验证规则而无需更改界面。 AdjustmentsGroup的Validate()函数只会在集合中的每个成员上调用Validate()。同样有效(无双关语)的方法也是为包含所有验证逻辑的对象提供单独的验证器类。

然后,您的AdjustmentService会在处理调整之前调用AdjustmentsGroup上的Validate()。