2

これがキャッチです。という名前のフィールドを持つビジネス オブジェクトがありますRegisterDate。通常のビジネス ルールでは、一度設定すると変更することはできません。

このフィールドをプロパティとして実装し、セッターを保護されたものとして定義して、オブジェクトの作成後にユーザーがそれを使用 (および設定) できないようにすることを最初に考えました。しかし、しばらく考えた後、プロパティのアクセシビリティ ルールにビジネス ルールを忍び込ませました。

2 番目に考えたのは、プロパティ セッターをパブリックのままにし、設定時に例外を実装することでした。これにより、ビジネス ルールがかなり明確になります。誰かがプロパティを設定しようとするたびにプロパティが例外をスローすることを期待するテスト ケースがあります。

ええと、しかし、それは動作を回避するための定型文です。結局のところ、コードの他の部分での誤用さえも回避して、物事を保護しないのはなぜですか? しかし、別の開発者が誤ってプロパティのアクセシビリティを変更し、再度公開して、ビジネス オブジェクトのユーザーがビジネス ルールに違反してこのフィールドを使用し始めたらどうなるでしょうか。

この状況に最適なアプローチは何ですか? この問題をどのように解決しますか?

4

1 に答える 1

3

コンストラクターでのみ設定する余裕がある場合は、フィールドを読み取り専用にすることができます。

public class SomeClass
{
  public SomeClass(DateTime regDate)
  {
     registerDate = regDate;
  }

  public DateTime RegisterDate { get { return registerDate; } }

  private readonly DateTime registerDate;
}
于 2011-02-08T14:38:20.637 に答える