我有一個執行資源密集型調用來填充其數據的類。標準的東西。下面是一個簡化版本...爲資源密集型設置的類進行適當設計
public class Foo1 {
private bool _IsLoaded;
private string _Prop;
private string _Prop2;
public string Prop1 {
get {
ResourceIntensiveCall();
return _Prop1;
}
}
public string Prop2 {
get {
ResourceIntensiveCall();
return _Prop2;
}
}
private void ResourceIntensiveCall() {
if ((!_IsLoaded)) {
// Do processing...
_IsLoaded = true;
}
_Prop1 = "something";
_Prop2 = "stuff";
}
}
這工作得很好,但違反了Microsoft.Design規則UsePropertiesWhereAppropriate因爲屬性正在做的工作太多了(雖然是間接的)。
我可以將調用移至構造函數,但違反了在構造函數中執行太多工作的規則。
我可以使用函數來代替屬性,但是如果你有很多函數,這會讓你覺得很麻煩。無論如何,只有第一次客戶電話才能完成真正的工作。
我可以使用客戶端代碼在訪問任何屬性前必須調用的公共Init()方法,但這是一個設計禁忌,因爲它使類太脆弱。
我曾考慮過使用Foo1Factory來新建Foo1對象並標記Foo1構造函數Internal以防止世界繞過我的工廠。
什麼被認爲是這種情況下適當的設計?