我正在为我的域对象构建工厂,因为它们的构造函数变得不整齐。我的问题是,我应该将约束的测试移到工厂,还是应该将它们留在域对象构造函数中?
测试主要是检查在实例化对象之前提供所需参数,或者相关对象具有特定值。如果测试失败,他们通常只是抛出异常。
一方面,我认为逻辑属于域对象,因为它是对象的重要部分。例如,没有姓名的宠物无效。
另一方面,我搬到工厂的几乎所有东西都是域对象的重要组成部分。 (这是域对象工厂的结果,对吗?它打破了域对象的封装?)
将它留在域中会更安全,但它是不整洁的。如果是在工厂,我的代码会更具可读性,但如果有人不小心使用new
运算符而不是工厂,我就麻烦了......
答案 0 :(得分:1)
如评论中所述,保持特定于域对象的验证会更好。通过这种方式,您可以使工厂摆脱所有特定于上下文的验证规则的混乱。
如果要集中工厂的错误处理,只需让工厂创建的每个类在尝试创建与验证要求不匹配的对象时抛出异常。你的工厂可以捕捉和处理它们。