3

文字列型の2つのプロパティを持つクラスがあるとしましょう

  1. プロップ1
  2. プロップ2

そして、以下の制限があります

  1. Prop2 の値が「Test2」の場合、Prop1 を「Test1」と等しくすることはできません。
  2. Prop1 の値が「Test11」の場合、Prop2 を「Test22」と等しくすることはできません。
  3. Prop2="Test222" の場合、Prop1="Test111" を設定します。

値が互いに依存しているプロパティを定義する最良の方法は何ですか?また、1 つのプロパティで行われた変更は、他のプロパティのセッター プロパティをトリガーする必要がありますか?

4

4 に答える 4

5

プロパティ セッターに検証を追加する必要があります。

   string prop1;
   string prop2;

   string Prop1 
   {
      get { return prop1;}
      set 
      {
         if (!( Prop2 == "Test2" && value == "Test1"))
         {
             Prop1 = value;
          }
         ... Add other condition here
      }
   }

   string Prop2
   {
      get { return prop1;}
      set 
      {
         // set Prop2 based on Prop1
       }
   }
于 2013-01-02T14:47:02.953 に答える
3

ここには多くの選択肢があります:

  • 両方のプロパティを読み取り専用にし、両方を同時に設定するメソッドを追加します。
  • 両方のプロパティを読み書き可能にし、一貫して設定されていない場合に例外をスローさせ、両方を同時に設定するメソッドを追加します。
  • 両方のプロパティを読み書き可能にし、検証を一時的にオフにできるメソッドを追加します。破棄時に検証を元に戻す「ガード」を作成し、usingステートメントでガードを使用します。
  • オブジェクトにトランザクション セマンティックを追加します。アンビエント トランザクションに注意し、トランザクションが「進行中」のときに保留セットをキューに格納し、トランザクションがコミットされたときにすべての変更を一度に適用します。
于 2013-01-02T14:51:30.040 に答える
0

このロジックを各プロパティのセッターに実装することもできますが、その賢明さには疑問があります。

Validateこれらのプロパティの状態をチェックするオブジェクトにメソッドを用意するか、検証を実行してエラーを返すか、必要に応じてオブジェクトに変更を加える別のオブジェクトを用意する方がよいでしょう。

于 2013-01-02T14:47:27.420 に答える
0

おそらくプロパティセッターで必要な「ロジック」のコーディングを担当しています(一種の検証)

仕様パターンを使用して検証ロジックを抽出し、同様にテスト可能にします

http://devlicio.us/blogs/jeff_perrin/archive/2006/12/13/the-specification-pattern.aspx

于 2013-01-02T14:46:14.233 に答える