1

AddressアプリケーションでPhoneNumber、、、などのカスタムデータ型用のカスタムBeanクラスをいくつか作成しましたSpecialCode

これらのカスタムの非プリミティブデータ型には、私が適用したい独自の制限があります。たとえば、次のように考えてPhoneNumberください。

public class PhoneNumber {
   private String stdCode;
   private String number;

   public PhoneNumber() {
   }

   public PhoneNumber(String stdCode, String number) {

      this.stdCode = stdCode;
      this.number = number;
   }

   /* getters and setters */

}

さて、私を混乱させるのは、の制限ですPhoneNumber。つまり、stdCodemustは、で始まる0か、numbermustは7または8桁の長さである必要があります。では、これらのルールはどこに適用されますか?
コンストラクターで?として:

//Custom costructor
public PhoneNumber(String stdCode, String number) {
    if (!stdCode.matches("[0-9]+") || !number.matches("[0-9]+")){
        throw new IllegalArgumentException("Error in Parsing. The STD Code and Number MUST be numeric digits.");
    }
    if (!"0".equals(stdCode.substring(1, 2))){
        throw new IllegalArgumentException("The STD Code must begins with 0");
    }
    if (stdCode.length() < 3 || stdCode.length() > 5){
        throw new IllegalArgumentException("The STD Code must be 3 to 5 digits long. Current Number of digits: " + stdCode.length() + ". ");
    }
    this.stdCode = stdCode;
    this.number = number;
}

または、カスタム例外もありますか?そして、これらのカスタム例外をBeanクラスとどこでマージする必要がありますか?
私は経験豊富なプログラマーではないので、ここでどのデザインパターンを適用すべきか知りたいですか?

4

3 に答える 3

1

PropertyVetoExceptionをスローすることにより、プロパティの更新を拒否できます。例と説明については、こちらを参照してください:http ://weblogs.java.net/blog/malenkov/archive/2007/11/how_to_veto_a_p.html

于 2012-05-29T17:59:25.523 に答える
1

あなたはあなたの電話#部品のためにゲッターとセッターを作成するべきですそしてあなたはセッターで検証チェックをしますか

于 2012-05-29T18:02:34.340 に答える
1

入力時に入力を検証することをお勧めします。GetterandSetterを使用することは良いオプションです。そのため、インスタンス変数へのデータの割り当て中に、そのタイプやその他のパラメータを確認できます。

于 2012-05-29T18:06:02.637 に答える