2011-02-08 1 views
2

ここはキャッチです。 RegisterDateという名前のフィールドを持つビジネスオブジェクトがあります。通常のビジネスルールでは、いったん設定されると変更できないと言います。ビジネスルールがプロパティのアクセシビリティのときに、どのようにビジネスルールをテストしますか?

このフィールドをプロパティとして実装し、setterをprotectedとして定義することで、オブジェクトの作成後にユーザーがそのフィールドを使用しないようにすることができます。しかし、しばらく考えた後、私はプロパティアクセシビリティルールでビジネスルールを詮索しました。

2番目の考えは、プロパティsetterをpublicのままにして、それを設定するときに例外を実装することでした。これにより、ビジネスルールがかなり明示されます。誰かが設定しようとするたびにプロパティが例外をスローすることを期待するテストケースがあります。

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

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

+1

http://stackoverflow.com/questions/1079292/should-i-use-set-once-variablesまたはhttp://stackoverflow.com/questions/839788/is-there-a-way- 1回のみのプロパティの設定 –

+0

優れた技術的な例がありますが、私のクラスはエンティティフレームワークが生成されています。また、このビジネスルールがユニットテストされていることを確認する方法も探しています。 –

+0

"だが、別の開発者が誤って財産のアクセシビリティを変更して再び公開するのはどうだろう?" - その道を歩いている場合は、別の開発者が入り、 –

答えて

3

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

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

    public DateTime RegisterDate { get { return registerDate; } } 

    private readonly DateTime registerDate; 
} 
関連する問題