这可能是一个基本问题,但我对DDD很新。 我有一个域对象,我们称之为adjust,可以从UI批量处理。在我们处理调整之前,我们需要验证将应用这些调整的日期。我的问题在于我的域对象中的IsValidDate()方法的位置。
我倾向于认为第三个选项是最好的选项,但我很难想到一组调整对象的域名。是否可以为此类场景“强制”容器类型域对象?是否有一种常见的做法来处理这个问题?
谢谢
编辑:IsValidDate实际上包含业务逻辑。这不仅仅是一个简单的日期验证方法
答案 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()。