2013-04-25 4 views
5

ファクトリ・パターンを使用する場合、ファクトリ・パターンにバリデーション・ロジックが含まれているか、またはコール・クラスに残してコンテキスト・データを渡す前にバリデーションを行う必要がありますか?ファクトリ・パターンにバリデーション・ロジックが含まれているか

私は単純なファクトリメソッドを持っていますが、インスタンス化するオブジェクトを決定するために渡される設定ツリーに依存しています。

config xmlが正しく形成されている可能性がありますが、工場で期待されている正しいフォーマットではない可能性があります。これを検証する必要がある場所はわかりません。

+2

渡された設定が有効でない場合、工場は例外をスローする必要があります。 – Lucas

+0

この質問を見てみましょう:http://stackoverflow.com/questions/11820127/how-to-handle-a-lot-of-validation-checks-necessary-before-creating-a-objectそしてあなたが決めるものは、すべての検証コードを単一の場所に配置します。 –

答えて

1

なぜ両方を提供していませんか?これにより、入力者の入力を有効にするかどうかを呼び出し元に伝えます。

のApache Commonsのからこの例を見てみましょう - InstantiateFactory

そのデフォルトコンストラクタは何の検証を提供しない:

InstantiateFactory(のjava.lang.Class classToInstantiate)なしを行い

コンストラクタ検証

しかしgetInstanceに検証を提供しています:

静的ファクトリーのgetInstance(のjava.lang.Class classToInstantiate、のjava.lang.Class [] paramTypes、java.lang.Objectの[]引数)

ファクトリーメソッドは、有効化を実行します。

0

工場出荷時のパターンを使用する場合は、工場出荷時は、検証ロジックが含まれているitselすべきか、それがコンテキストデータを渡す前に、検証の世話をするために呼び出すクラスに任されるべき?別の検証方法Validate(Config)があり

  1. 検証別のプロセス

として:

検証を整理するには、2つの異なる代替があります。このメソッドは、構築メソッドの前に呼び出され、Configが有効かどうかの情報を返します。 ValidateメソッドがConfigを返した場合は、そのメソッドが呼び出されます。建設中のエラーは例外とみなされます。

    1. 検証構築プロセスの一部として

    別個の検証方法がありません。代わりに、必要に応じて構築メソッド内で検証が行われます。構築方法は、に失敗し、構築されたオブジェクトまたはエラーを示す結果のいずれかを返すことが許可されます。

    第2の変種は、ほぼゼロのコードと性能オーバヘッドのモナドを使用してうまく実装できます。

  • 1

    検証の意味は?ファクトリデザインパターンのインスタンスの一部であるコードが、他のコードと異なると思われる理由は何ですか?

    ユーザーまたは入力ファイルから読み取られた入力値のチェックを意味する場合、答えはです。入力を解析するコードは、読み取り値を使用するファクトリではなく、検証を行います。

    ファクトリのファクトリメソッドで、呼び出し元がそれらのメソッドの前提条件に従った値を指定していることを確認することを意味する場合、その答えは引数に前提条件を課す他のメソッドと同じです。 Javaのコンセンサススタイルは、前提条件をチェックし、前提条件が満たされていない場合に適切なRuntimeExceptionsをスローするメソッド用です。

    関連する問題