의존 역전 원칙 예제

종속성 반전 원칙은 로버트 C. 마틴에 의해 가정되었고, 논문 객체 지향 디자인 품질 메트릭을 포함한 여러 간행물에 설명되었다: 종속성 분석,[3] 1996년 5월 C++ 보고서에 나타나는 기사 종속성 반전 원칙[4] 및 책 애자일 소프트웨어 개발, 원칙, 패턴 및 관행,[1] 및 애자일 원칙, 패턴 및 C#의 관행. 일부는 DIP의 응용 프로그램보다 더 명확하게, 다른 일부는 다른 디자인 원칙에 맞는 것처럼 보일 수 있습니다. 결국, 어떤 원칙이 상황에 더 적용되는지는 무관하다. 다니엘 테르호르스트-노스는 모든 소프트웨어가 책임이 있다고 주장할 때 이 아이디어를 잘 포착합니다. 개발자로서 내 목표는 코드를 작성하는 것입니다. 그러나 교정기가 필요한 경우 치열 교정 의사에게 묻는 것과 같습니다. 대답은 예, 감사합니다, 나는 내 보트에 또 다른 계약금을 할 필요가있다. 종속성 반전 패턴의 목표는 추상 계층의 조정과 함께 이 고도로 결합된 분포를 방지하고 상위/정책 계층의 재사용성을 높이는 것입니다. 종속성은 위험합니다. 예를 들어, 내 시스템에 Java 런타임 환경(JRE)을 설치해야 하고 설치되지 않은 경우 시스템이 작동하지 않습니다. 내 시스템은 아마 운영 체제의 일종을 필요로한다.

사용자가 웹을 통해 시스템에 액세스하는 경우 사용자가 브라우저를 갖도록 해야 합니다. 사용자가 제어하거나 제한하는 이러한 종속성 중 일부는 무시할 수 있습니다. 그러나 종속성 반전 원칙은 개체 지향 시스템을 디자인할 때 종속성 구조를 반전시켜야 한다고 합니다. 개체 지향 시스템에 대한 종속성 구조를 보여주는 아래 다이어그램을 살펴보십시오 – 반전은 방향의 반전이지만, 무엇에 비해 반전? 구조화 해석 및 설계의 설계 부분입니다. 비즈니스와 데이터 액세스 간의 추상적 종속성에 따라 달라지지만 동일하게 유지됩니다. 지금까지는 단일 책임, 개방/폐쇄, 리스코프 대체 및 인터페이스 분리 원칙을 살펴보는 것이 있었습니다. 직접 구현은 하나의 라이브러리에서 서비스 추상화 클래스로 정책 클래스를 패키지화합니다. 이 구현에서 상위 수준 구성 요소 와 하위 수준 구성 요소는 별도의 패키지/라이브러리로 배포되며, 여기서 상위 수준 구성 요소에 필요한 동작/서비스를 정의하는 인터페이스가 소유되고 상위 수준 내에 존재합니다. 구성 요소의 라이브러리입니다.