필자는 Inversion of Control 지식을 향상시키고 자하는 코드를 발견했습니다. 이것이 진정한 IoC입니까?이 IoC의 올바른 구현입니까?
public class DepartmentLogic : IDepartmentLogic
{
private readonly IDepartmentRepository _departmentRepository;
public DepartmentLogic(IDepartmentRepository repo)
{
_departmentRepository = repo;
}
public DepartmentLogic()
{
_departmentRepository = new DepartmentRepository(Constants.CONNECTION_STRING_NAME);
}
}
단위 테스트에서이 클래스를 호출하면 조롱 된 IDepartmentRepository가 전달됩니다. 그러나 모든 주요 응용 프로그램 코드는 기본 생성자와 함께 클래스를 사용하며,이 클래스는 콘크리트 DepartmentRepository를 뉴스로 보냅니다.
이 정보가 맞습니까? 나는 당신이 기본 생성자에서 일어나고있는 것처럼 호출 클래스 내의 종속 클래스를 새로 작성해서는 안되며,이 클래스를 생성 한 클래스에서 ConcreteRepository를 새로 작성해야한다고 읽었습니다.
네 말이 맞아. 이 코드는 IoC의 목적을 완전히 이기고 밀접하게 결합 된 유형으로 끝납니다. 단위 테스트의 목적을 위해 IoC 생성자를 만든 것처럼 보이지만 전체적인 설계 방법론으로 채택하지는 않습니다. – itsme86
감사합니다. @ itsme86 - 그게 제가 걱정 한 것입니다. 제가 질문 할 때, "단위 테스트 외에도 IoC에 대한 다른 이유가 없습니다"라는 질문을 받고 응답 방법이 확실하지 않습니다. 저는 그 진술이 무효라고 믿습니다. 그리고 여러 가지 이유가 있지만, 나는 선택할 수없는 것 같습니다. 도와 주실 수 있습니까? – Craig
[이] (https://en.wikipedia.org/wiki/Coupling_ (computer_programming) # Dadadvantages)는 단단히 묶는 단점을 요약합니다. – itsme86