考慮下面的類是否應類方法也接受參數或使用類屬性
public class Class1
{
public int A { get; set; }
public int B { get; set; }
public int GetComplexResult()
{
return A + B;
}
}
爲了使用GetComplexResult
,這個類的一個消費者必須知道調用方法之前設置A
和B
。如果GetComplexResult
訪問許多屬性來計算其結果,如果消費者未首先設置所有適當的屬性,則這可能導致錯誤的返回值。所以,你可能會這樣寫類這樣反而
public class Class2
{
public int A { get; set; }
public int B { get; set; }
public int GetComplexResult(int a, int b)
{
return a + b;
}
}
這樣,呼叫者GetComplexResult
被強制在所有需要的值傳遞,確保預期回報值計算正確。但是,如果有許多所需的值,參數列表也會增長,這看起來也不是很好的設計。它似乎也打破了將A
,B
和GetComplexResult
封裝在一個類中的觀點。我甚至可能會試圖使GetComplexResult
成爲靜態的,因爲它不需要類的實例來完成它的工作。我不想去製作一堆靜態方法。
是否有術語來描述這兩種創建類的不同方式?他們都似乎有優點和缺點 - 有沒有我不明白,應該告訴我,一種方式比另一種更好?單元測試如何影響這個選擇?
我總是嘗試調用getter而不是直接訪問成員,並在getter中記錄一條消息,如果我返回一個空值。我曾經使用斷言,但後來我們發現一些客戶在生產(!)中啓用斷言的情況下運行。 – TMN 2010-03-05 20:17:07