检查对象构造函数或工厂中的约束


Check Constraints in Object Constructor or Factory?

我正在为域对象构建工厂,因为它们的构造函数变得不整洁。我的问题是,我应该将约束的测试转移到工厂,还是应该将它们留在域对象构造函数中?

测试大多只是检查在实例化对象之前是否提供了所需的参数,或者相关对象是否具有特定值。如果测试失败,他们通常只是抛出一个异常。

一方面,我认为逻辑属于领域对象,因为它是对象的重要组成部分。例如,没有名字的宠物就是无效的。

另一方面,我要转移到工厂的几乎所有内容都是域对象的重要组成部分。(这是域对象工厂的结果,对吧?它破坏了域对象的封装?)

把它留在域中会更安全,但它不整洁。如果我的代码在工厂里,它会更可读,但如果有人不小心使用了new运算符而不是工厂,我就有麻烦了。。。

如注释中所述,最好保持特定于域对象的验证。通过这种方式,您可以使您的工厂摆脱所有上下文特定验证规则的混乱。

如果您想集中处理工厂的错误,只需让工厂创建的每个类在尝试创建不符合验证要求的对象时抛出异常。你们的工厂可以抓住并处理它们。