의존 관계 역전 원칙에 대해 이야기

좋은 독서 경험을 얻기 위해, 원본을 참조하십시오 : 포털

첫째, 개념

종속성 반전 원리 (의존성 반전 원칙, DIP) 코드 구조 설계에 참조 할 때, 당신은 추상화를 의존해야 둘 다 낮은 수준의 계층 모듈 모듈에 의존해서는 안된다.

추상의 세부 사항은 추상적 인에 의존한다, 세부 사항에 의존해서는 안됩니다. 클래스와 클래스 사이의 결합을 감소시키고, 시스템의 안정성을 향상시킬 수있는 반전 의존하여 코드의 가독성 및 유지 보수성을 개선하고 프로그램을 수정함으로써 야기되는 위험을 줄이기 위해.

둘째, 왜

예를 들어 처음 봐

그러나 의존 관계 역전 원칙은 그것을 수행하는 방법인가? 예에서 살펴 보자 : 학습의 사랑, 학생들이 지금은 물론 "디자인 패턴"와 "자바"배우는 "나는 세 가지 마음이없는", 의사 코드는 다음입니다 :

public class Wmyskxz {

    public void studyJavaCourse() {
        System.out.println("「我没有三颗心脏」同学正在学习「Java」课程");
    }

    public void studyDesignPatternCourse() {
        System.out.println("「我没有三颗心脏」同学正在学习「设计模式」课程");
    }
}复制代码

우리는 시뮬레이션 가기 전화 :

public static void main(String[] args) {
    Wmyskxz wmyskxz = new Wmyskxz();
    wmyskxz.studyJavaCourse();
    wmyskxz.studyDesignPatternCourse();
}复制代码

한 가지 이유 : 효과적인 통제의 범위

"나는 세 가지 마음이없는"때문에 학생들은 AI (인공 지능) 인 학습 프로그램 계속은 "급증"학습에 대한 관심과 함께 배우고 있습니다. 이번에는 높은 수준의 호출에 기본이되는 구현에서 "사업 확장", 다시 코드를 수정하기 때문이다.

우리는 Wmyskxz 클래스에 추가 할 필요가 studyAICourse()사실은 매우 불안정, 릴리스 시스템 후, 있도록, 또한 높은 수준의 호출을 높일 필요라는 방법. 물론이 간단한 예제에서, 우리는 때문에 우리가 살고,이 시간을 변경의 영향을 수용 할 수 있음을 확신 할 수 있습니다 새로운 코드는 모두 , 우리는 반환, 그들은 또한 좋은 커버 라이브 될 수 있지만, 실제 상황과 실제 소프트웨어 환경은 훨씬 더 복잡하다.

이상적인 상황은 우리가 "같은 년"이 될 수 좋은 코드를 작성해야한다는 것입니다 , 변경되지 않은 상태로 유지하기 위해 이미 보장 할 수있는 기존의 동작을 수정할 수 없습니다 단위 테스트에 포함 수단을하는 수단 "안정" . 코드의 수정에 미치는 영향은 전혀 문제가 보인다 얼마나 간단한 지 알 수없는 위험에 의해 발생되지 않습니다.

두 가지 이유가 : 코드의 가독성과 유지 보수성을 향상시키기 위해

또 다른 점은, 당신은 AI가 실제로 연구의 새로운 코스, 본질적으로 자신의 세 가지 클래스의 행동, 같은 우리는 우리의 클래스 내부에서 그런 행동 코드 스프롤을 할 경우 거의 같은, 곧 추가 발견하지 않았습니다 우리 클래스는 끔찍한 높은되었다 비용이 있습니다, 우리는이 문제를 완화하기 위해이 클래스의 재건을 실현 때까지 기다릴 필요가, 비 대한 될 것입니다.

세 가지 이유 : 커플 링을 줄이기 위해

이러한 설명에서 "자본론"

상품 경제의 초기 단계, 물물 교환의 출현합니다. 당신이 상사가 그를 위해 돼지를 취하도록 요청 아이폰, 아이폰 판매를 구입한다고 가정하지만 돼지하지 않습니다, 당신은 프로그래밍됩니다. 당신이 그에게 돼지를 변경하는 APP의 돼지를 만들기 위해, 그는 말했다, 돼지 농부를 찾을 수 있도록, 돼지 변경, 그는 말했다,하지만 대가로 금 목걸이를 시작할 수 있습니다 ...

그래서 여기에 이렇게 심각한 커플 링 재해의 원인, 개체 종속성의 시리즈가 있었다. 커플 링의 정도가 크게 감소 될 것입니다 그래서, 교환하는 - 즉, 돈 -이 문제에 대한 최상의 솔루션은 추상적 인 쌍둥이의 판매에 의존하는 것입니다.

셋째, 수행하는 방법

우리의 코드는 정상을 달성하기 위해 현재 낮은 수준에 직접 의존, 그리고 지금 우리는 ( "자본론"위의 위의 예에서와 같이)이 강한 의존도를 분리하는 추상적 인 ICourse 인터페이스를 정의해야합니다 :

우리가 의사 코드를 참조 할 수 있습니다 다음으로, 우리는 물론 추상적 인 ICourse 인터페이스를 설정합니다 :

public interface ICourse {
    void study();
}复制代码

그런 다음 각각 작성 JavaCourseDesignPatternCourse클래스를 쓰기 :

public class JavaCourse implements ICourse {

    @Override
    public void study() {
        System.out.println("「我没有三颗心脏」同学正在学习「Java」课程");
    }
}

public class DesignPatternCourse implements ICourse {

    @Override
    public void study() {
        System.out.println("「我没有三颗心脏」同学正在学习「设计模式」课程");
    }
}复制代码

그런 다음 Wmyskxz 클래스는 다음과 같은 방법으로 변환 :

public class Wmyskxz {

    public void study(ICourse course) {
        course.study();
    }
}复制代码

다음은 우리의 전화를했다 :

public static void main(String[] args) {
    Wmyskxz wmyskxz = new Wmyskxz();
    wmyskxz.study(new JavaCourse());
    wmyskxz.study(new DesignPatternCourse());
}复制代码

우리가 하나의 코드를 보면이 시간이 새로운 과정에 대한 관심이 급증하는 방법 "나는 세 가지 마음이없는"단지 당신이 클래스를 생성, 매개 변수를 전달하는 방법으로 그것을 말할 필요가 기본 코드를 수정할 필요없이. 사실 그것은 익숙한 같은 비트의 의존성 주입 의 모드.

즉, 기억 추상적으로 훨씬 더 안정적인 프레임 워크를 구축을 참조하여 상세하게보다 얼굴 인터페이스 프로그래밍, 수요를 따라서 얻을에 대한 첫 번째 최상위 디자인 세부 사항 코드 구조를 재 - 설계.

참고 자료

  1. www.cnblogs.com/aoyeyuyan/p ... - 의존성 반전 • 반전 컨트롤 • 의존성 삽입 (Dependency Injection) • 지향 프로그래밍 인터페이스 - 고급 년의 그 용어를 이해하지 못하는
  2. "봄 5 대 원칙과 30 개 필기 실제 클래스"- 탄 Yongde와

---

대회 끈적 꼬리 :

무단 전재에 오신 것을 환영합니다, 소스를 표시하시기 바랍니다!

독립 도메인 이름의 블로그 : wmyskxz.com

제인 책 ID : 나는 3 마음이없는 @

GitHub의 : wmyskxz

대중의 관심 마이크로 신호에 오신 것을 환영합니다 : wmyskxz를

학습 및 학습 자료 및 생활을 공유하려면

또한 QQ 그룹을 추가 할 수 있습니다 연결 친구에게 원 : 3,382,693
돈을

추천

출처juejin.im/post/5dd2ac6851882567490f9404