我以某种方式读到在构造函数中创建对象是不好的风格......但是,我忘记了为什么它被认为是不好的风格(尤其是在使用依赖注入时)。
下面是在构造函数中作为伪代码创建对象的示例:
Myclass
{
Myclass(MyMemberFactory& fac)
{
for(Some criteria)
push_back(fac.createMyMemberType());
}
vector<MyMemberType*> getMyMember();
{
return myMember_;
}
...
private:
vector<MyMemberType*> myMember_;
}
因此,您可以毫无问题地使用单元测试,因为您可以模拟 MyMemberFactory。如果我要在单独的初始化方法中移动 for 循环,则需要检查双重初始化,如果初始化已经完成,所有 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_;
}
所以知道任何原因,为什么我应该使用第二种方法而不是第一种方法?或者,也许我只是脑子有问题,而第一种方法完全没问题?