假设我有一个对象Foo。我还有一个FooBuilder,用于构造Foo对象。我何时何地应该验证Foo对象的数据?
Foo foo = new FooBuilder()
.withX("specific data for X")
.withY("specific data for Y")
.build();
让我们在等式中添加验证可能包含例如数据库中的查找。构建器是否应在构建方法中执行验证?或者foo对象中是否应该有特定的验证方法?或者,最好从Foo对象和FooBuilder完全抽象出来验证?
答案 0 :(得分:2)
理想情况下,根本不可能创建无效的Foo
对象。因此,在Foo
中使用验证方法不是最佳选择。
验证应尽早进行。这可以使用build()
方法,或者 - 如果可能 - 甚至可以在构建器的setter方法中更早。
如果你应该将验证器的实际实现放入构建器或单独的类中,则取决于其复杂性。如果它需要像数据库查找这样的东西,正如你所提到的那样,创建一个单独的验证类可能是有意义的。
我想补充一点,构建器有时被认为是反模式,表明该类可能过于复杂,应该分成多个较小的类。