使用构建器模式的对象验证

时间:2016-05-03 10:58:57

标签: validation oop design-patterns builder

假设我有一个对象Foo。我还有一个FooBuilder,用于构造Foo对象。我何时何地应该验证Foo对象的数据?

Foo foo = new FooBuilder()
    .withX("specific data for X")
    .withY("specific data for Y")
    .build();

让我们在等式中添加验证可能包含例如数据库中的查找。构建器是否应在构建方法中执行验证?或者foo对象中是否应该有特定的验证方法?或者,最好从Foo对象和FooBuilder完全抽象出来验证?

1 个答案:

答案 0 :(得分:2)

理想情况下,根本不可能创建无效的Foo对象。因此,在Foo中使用验证方法不是最佳选择。

验证应尽早进行。这可以使用build()方法,或者 - 如果可能 - 甚至可以在构建器的setter方法中更早。

如果你应该将验证器的实际实现放入构建器或单独的类中,则取决于其复杂性。如果它需要像数据库查找这样的东西,正如你所提到的那样,创建一个单独的验证类可能是有意义的。

我想补充一点,构建器有时被认为是反模式,表明该类可能过于复杂,应该分成多个较小的类。