나는 여기에 남학생 오류가 있었고 의심을 찾고 있습니다. 내 솔루션 (C #)의 많은 클래스-대다수를 감히 감히-해당 인터페이스를 작성했습니다. 예를 들어 "ICalculator"인터페이스와이를 구현하는 "Calculator"클래스는 해당 계산기를 다른 구현으로 대체 할 가능성은 거의 없습니다. 또한 이러한 클래스의 대부분은 종속성과 동일한 프로젝트에 있습니다. 실제로는 그저 필요 만 internal
있지만, public
각각의 인터페이스를 구현하는 부작용으로 끝났습니다 .
모든 것에 대한 인터페이스를 만드는이 관행은 몇 가지 허위에서 비롯된 것이라고 생각합니다.
1) 원래 단위 테스트 모의를 작성하는 데 인터페이스가 필요하다고 생각했지만 (Moq를 사용하고 있음) 멤버가 virtual
인 경우 클래스를 조롱 할 수 있고 매개 변수가없는 생성자가 있음을 발견했습니다. 내가 틀렸다).
2) 원래 IoC 프레임 워크 (Castle Windsor)에 클래스를 등록하는 데 인터페이스가 필요하다고 생각했습니다.
Container.Register(Component.For<ICalculator>().ImplementedBy<Calculator>()...
실제로 구체적인 유형을 자체에 등록 할 수있을 때 :
Container.Register(Component.For<Calculator>().ImplementedBy<Calculator>()...
3) 인터페이스, 예를 들어 의존성 주입을위한 생성자 파라미터를 사용하면 "느슨한 커플 링"이 발생합니다.
인터페이스에 열광 했습니까?! 공용 API 노출 또는 "플러그 가능"기능과 같은 인터페이스를 "일반적으로"사용하는 시나리오를 알고 있습니다. 내 솔루션에는 그러한 사용 사례에 맞는 소수의 클래스가 있지만 다른 모든 인터페이스가 필요하지 않은지 궁금해 제거해야합니까? 위의 3)과 관련하여 이렇게하면 "느슨한 커플 링"을 위반하지 않습니까?
편집 :-Moq와 함께 놀았으며 메서드를 공개 하고 가상으로 만들고 매개 변수 가없는 공용 생성자가 있어야 모의 할 수 있습니다. 그렇다면 내부 수업을 가질 수없는 것 같습니다.