我做了以下內容:爲什麼只需要在構造函數中進行初始化就需要顯式的Initialize方法?
var vm = scope.CreateInstance<IBlaBla>();
vm.SetTitles("bla"); //anti pattern
vm.Initialize(foo, bar);
我被告知,上面的是一個反模式,因爲我從來沒有調用初始化方法之前調用其他方法。因此,解決方案是將另一個參數傳遞給Initialize方法,並使該方法執行SetTitles的工作。
我可以看到這背後的邏輯,因爲你想確保虛擬機在做任何事情之前被正確初始化。但是當我們創建VM的新實例時,爲什麼不能完成初始化工作呢?我不明白需要一個明確的Initialize方法。這何時會成爲優勢?
因爲當您設置了標題時vm的狀態是未初始化的,並且您的更改可能會在initialize方法內被重寫。如果你的settitles方法是vm初始化的一部分,爲什麼你不用單一方法做所有初始化? – VikciaR
@VikciaR好吧,我明白了,但爲什麼不在創建虛擬機實例時初始化狀態? – DSF
從字典中:* initialize:設置爲該值或放入適合操作開始的條件*。因此,在您的操作開始時隨時隨地撥打該號碼可能會引起混淆。 – DavidG