2016-05-03 9 views
1

私はオブジェクトFooを持っているとしましょう。私はまた、Fooオブジェクトを構築するために使用されるFooBuilderを持っています。 Fooオブジェクトのデータをいつ、どこで検証する必要がありますか?ビルダーパターンを使用したオブジェクト検証

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

検証には、たとえばデータベースなどの参照が含まれることがあります。ビルダーはビルドメソッド内で検証を実行する必要がありますか?または、特定の検証メソッドがfooオブジェクトに存在するかどうかを確認します。あるいは、検証は、FooオブジェクトとFooBuilderの両方から完全に抽象化された方が良いでしょうか?

答えて

2

無効なFooオブジェクトを作成することは理想的ではありません。したがって、Fooに検証方法を持つことは最良の選択ではありません。

検証はできるだけ早く行う必要があります。これは、build()メソッドでも、可能であればビルダーのセッターメソッド内でも可能です。

バリデータの実際の実装をビルダーまたは別のクラスに配置する必要がある場合は、その複雑さによって異なります。前述のとおり、データベース検索などが必要な場合は、別の検証クラスを作成するのが理にかなっています。

ビルダーは、クラスが複雑すぎる可能性があり、複数の小さなクラスに分割する必要があることを示す反パターンとみなされることがあります。

関連する問題