我有以下類別:更好的重構方法?
public abstract class BaseClass
{
private readonly double cachedValue;
public BaseClass()
{
cachedValue = ComputeValue();
}
protected abstract double ComputeValue()
}
public class ClassA : BaseClass
{
protected override double ComputeValue() { ... }
}
public class ClassB : BaseClass
{
protected override double ComputeValue() { ... }
}
其中ComputeValue()
是一個耗時的計算。
問題是,ClassA
和ClassB
中還有其他方法需要從ComputeValue()
返回的值。我正在考慮在BaseClass中添加一個名爲'CachedValue'的受保護屬性,但我發現這種方法對於其他可能不知道其存在的程序員來說是多餘的和混淆的,並且可能直接調用ComputeValue()。
第二個選項是在派生類級別使用可空類型,因爲我不一定需要計算在BaseClass的構造函數來完成,懶惰計算可能是一個更好的選擇:
protected override double ComputeValue()
{
if(cachedValue.HasValue)
{
return (double) cachedValue;
}
// Do computation
cachedValue = ...
return cachedValue;
}
但我覺得我可以做得更好。
你對此有何看法?
謝謝。
編輯:爲了澄清,我試圖通過強制使用'cachedValue
'來防止ComputeValue()
被多次調用。
但隨後其他程序員不是很熟悉的代碼可能只是使用ComputeValue()導致性能問題 – alhazen 2010-10-26 20:26:42
更好的負擔是對程序員真正瞭解他們是不是在你的類的用戶在做什麼 - 這種方法確實有一個乾淨的「外部」接口,但它當然仍然需要程序員修改繼承的類來理解基類的接口。 – BrokenGlass 2010-10-26 20:32:27
你說得對,最好讓事情簡單些。謝謝。 – alhazen 2010-10-27 14:37:07