나는 생성자에서 객체 생성을 수행하는 것이 좋지 않은 스타일이라고 읽었습니다 ... 그러나 왜 나쁜 스타일로 간주되었는지 잊었습니다 (특히 의존성 주입을 사용할 때). 당신이 조롱 - 멀리 할 수 있기 때문에 MyMemberFactory을생성자의 객체 생성
Myclass
{
Myclass(MyMemberFactory& fac)
{
for(Some criteria)
push_back(fac.createMyMemberType());
}
vector<MyMemberType*> getMyMember();
{
return myMember_;
}
...
private:
vector<MyMemberType*> myMember_;
}
그래서 당신은 문제없이 단위 테스트를 사용할 수 있습니다 여기에
의사 코드로 생성자에서 객체 생성의 예
. for 루프를 별도의 initialize-method로 옮기면 이중 초기화를 확인하는 데 필요하며 초기화가 이미 완료된 경우 모든 getters가 먼저 ckeck해야합니다. 여기에 별도의 초기화 사용하여 코드 : 나는 첫 번째 방법을 통해 두 번째 방법을 사용해야하는 이유 이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