我有一個類表示一個包含許多計算屬性的域實體。大部分計算取決於也計算的其他屬性。最簡單的形式是類的例子可以看起來像這樣。類中相關計算屬性的設計模式?
public class AnalysisEntity
{
public decimal InputA { get; set; }
public decimal InputB { get; set; }
public decimal InputC { get; set; }
public decimal CalculatedValueA
{
get { return InputA * InputC; }
}
public decimal CalculatedValueB
{
get
{
decimal factor = FactorGenerator.ExpensiveOperation();
return CalculatedValueA/factor;
}
}
public decimal CalculatedValueC
{
get { return InputA * InputB; }
}
public decimal CalculatedValueD
{
get { return (CalculatedValueA * InputB)/CalculatedValueB; }
}
public decimal CalculatedValueE
{
get { return CalculatedValueD/aConstant; }
}
}
然而,這種解決方案將離開我解決以下問題:
- 正是在一些計算(其中一些是長時間)的低效率越來越一再呼籲。
- 要單獨測試單個計算而不提供所有必需的輸入,以使所有依賴計算首先工作,這是很困難的。
- 這是很難從持久有效地檢索(我使用NHibernate的),因爲即使計算出的數據可以存儲到數據庫中,它不會檢索,每當對象被讀取,而不是重新計算。
- 隨着單元測試隨着所需輸入變得越來越大,很難增加計算。
我已經嘗試過使用計算器對象和策略模式來設置屬性的內部字段,但我最後得到了一個過長的控制函數來強制執行計算。另外將所有計算轉移到另一個對象將原始實體轉變爲我不斷閱讀的貧血域對象應該避免。
我應該使用什麼設計模式和類結構來解決上述問題?
謝謝
謝謝詹姆斯,我可以看到如何工作。 – 2010-10-27 00:31:30