我以某種方式讀取了在構造函數中做對象創建的不良風格......但是,我忘記了爲什麼它被認爲是不好的風格(特別是在使用依賴注入時)。在構造函數中創建對象
這裏對象創建在構造函數的僞代碼的例子:
Myclass
{
Myclass(MyMemberFactory& fac)
{
for(Some criteria)
push_back(fac.createMyMemberType());
}
vector<MyMemberType*> getMyMember();
{
return myMember_;
}
...
private:
vector<MyMemberType*> myMember_;
}
所以,你可以使用單元測試沒有問題,因爲你可以模擬走MyMemberFactory。 如果我想在一個獨立的初始化方法中移動for-loop,那麼檢查雙重初始化是必要的,並且如果初始化已經完成,所有getter將需要首先進行。這裏的代碼,通過使用一個單獨的初始化:
Myclass
{
Myclass() : isInitialized_(false)
{
}
void initialize(MyMemberFactory& fac);
{
if(isInitialized_)
throw "Error: Double-Init is not permitted.";
for(Some criteria)
push_back(fac.createMyMemberType());
isInitialized_ =true;
}
vector<MyMemberType*> getMyMember();
{
if(isInitialized_)
throw "Initialize first!";
return myMember_;
}
...
private:
vector<MyMemberType*> myMember_;
bool isInitialized_;
}
所以知道任何理由,我爲什麼要使用第二種方法比第一種方法?或者,也許我只是有錯誤的想法,第一種方法是完全正確的?
好的,非常感謝......我只是以一般的方式在腦海中受到了限制。 – Alex