나는 자주 의존성을 주입하기 위해 서명에서 사용하고있는 인터페이스를 만들고, class AIface
및 class AImpl : public AIface
으로 끝나는 자신을 찾습니다. 그리고 꽤 자주 나는 결코 다른 서브 클래스를 구현하지 않는다. class AIface
의존성 주입 + 완전 가상 대 인터페이스
이 방법은 모든 public 메서드 virtual을 사용하여 구현을 직접 사용하는 것이 유리한가요?
긴 설명 :
우리가 청소 서비스와 함께 동물원을 말한다. 우리는 TDD를하고 가짜 FeedingSvc로 동물원을 테스트 할 수 있기를 원합니다. 그래서 우리는 의존성 주입을 위해갑니다. 의 차이점은 무엇
:
class FeedingSvcIface{
virtual void performFeeding() = 0;
} ;
class RoboticFeedingSvc: public FeedingSvcIface{
void performFeeding();
};
Class Zoo{
Zoo(FeedingSvcIface&);
//...
};
class RoboticFeedingSvc{
virtual void performFeeding();
};
Class Zoo{
Zoo(RoboticFeedingSvc&);
//...
};
대 (그리고 이제까지 필요한 경우, 미래의 인터페이스 추출) 테스트의 관점에서
를, 전자는 것 더 쉽습니다.
보통 "교차하는 레이어"라고 말하면서 인터페이스를 추가하는 것이 자연스럽지 만 테스트 할 때가 있습니다.
미래에는 다른 유형의 FeedingSvcs
을 구현해야 할 수도 있지만, 실제로 필요하지 않은 경우 오늘 추상화를 수행하는 이유는 무엇입니까?,
일부 논리를 캡슐화하기 위해 두 클래스를 분할 할 수 있습니다.
처음부터 인터페이스를 사용하면 단위 테스트 용 모의 객체를 훨씬 쉽게 만들 수 있습니다. – dlf