2011-09-10 6 views
1

これは設計上の問題です。Pojo内での検証

私は私の質問はmemberVariableコンストラクタパラメータの検証中にどこまで私たちが行くことができている

class MyPOJO { 
    private String memberVariable; 
    MyPOJO(String memberVariable) { 
     validate(memberVariable); 
     this.memberVariable = memberVariable; 
    } 
} 

、同様に定義されたPOJOクラスを持っています。次のvalidateメソッドの独自の実装が許容される、POJOのコンストラクタで厳格なチェックを行っているの背後にある

private validate(final String memberVariable) { 
    Validate.isNotNull(memberVariable); // this is basic check. 
    Validate.isTrue(memberVariable.indexOf(" ") == -1); //again a basic check. 
    List<String> validValues = DBFactory.getDB().getValidValues(); 
    Validate.isTrue(validValues.contains(memberVariable)); // checks if the memberVariable value is present in db. 
} 

引数は、私たちがMyPOJOインスタンスは、任意のランダムなmemberVariableを使用して作成されることはありませんことを確認することができますということです。 私の質問は、これが良いデザイン体系であるかどうかです。検証ロジックをPOJOから一括して引き出す必要がありますか?

答えて

0

入力検証はPOJOの一部ではありません。このようにして、作成されたインスタンスが正しいことを保証することができます。一般に、これはDesign-by-Contractと呼ばれます。

0

短答:はい。何故なの?

長い答え:はい、しかし...

  1. あなたはそれが検証に失敗した場合に行うには何を計画していますか?どのような例外をスローしますか?
  2. これは有効値のチェックにすべて集約することができるようです。なぜなら、有効な値にヌル値またはスペース値がないからです(私は推測します)。
+0

OPは、正当な引数の例外がスローされたことを覚えていれば、検証チェックのためにapacheライブラリを使用していると思います。 – Scorpion

+0

@Scorpion commons-lang 3では、彼らは事実上何の理由もなくNullPointerExceptionをスローするようにnotNullを変更しました(Jiraの問題「固定」は長期間にわたって固定されないため閉鎖されました)https://issues.apache.org/ジラ/ブラウズ/ LANG-52? – MetroidFan2002

+0

1. IllegalArgumentException(実行時例外)。提供されている値がリストにない場合、* runtime *で例外がスローされることはクライアントには分かりません。もちろん、それを文書化することもできますが、クライアントが値のリストを知らないと、最初にpojoをどのようにインスタンス化できますか?ユニットのテスト方法は? –

0

IMHOこれは良いです。オブジェクトが不正な引数でインスタンス化できない場合は、不正な引数の例外をスローすることは常に理にかなっています。これは、オブジェクトを不変に保つのにも役立ちます。

関連する問題