2011-02-08 96 views
2

這裏是捕捉。我有一個名爲RegisterDate的業務對象。像往常一樣,商業規則說,一旦設定,就不能改變。如何在業務規則屬性可訪問性時測試業務規則?

我首先想到的是將該字段作爲屬性實現並將setter定義爲受保護的,防止用戶在創建對象後使用(並設置)該setter。但經過一段時間後,我讓我偷偷摸摸地看到一個財產訪問規則中的商業規則。

我的第二個想法是讓屬性setter公開,在設置時實現一個異常,這使得業務規則非常明確。每當有人試圖設置它時,都會出現一個測試用例,希望該屬性拋出異常。

嗯,但是這是一個避免行爲的樣板,爲什麼不讓這個東西受到保護,甚至避免在代碼的其他部分濫用?但後來我想知道,如果另一位開發人員意外更改了屬性可訪問性並將其重新公開,並且業務對象的用戶開始使用違反業務規則的此字段,該怎麼辦?

這種情況的最佳方法是什麼?你會如何解決這個問題?

+1

http://stackoverflow.com/questions/1079292/should-i-use-set-once-variables或http://stackoverflow.com/questions/839788/is-there-a-way-設置一個屬性一次只在一個c – 2011-02-08 14:42:12

回答

3

如果你負擔得起只能在構造函數中設置它,你可以使字段只讀。

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

    public DateTime RegisterDate { get { return registerDate; } } 

    private readonly DateTime registerDate; 
}