架構設計-依賴倒置原則

0 概述

依賴倒置原則(Dependence Inversion Principle)是程序要依賴於抽象接口,不要依賴於具體實現。簡單的說就是要求對抽象進行編程,不要對實現進行編程,這樣就降低了客戶與實現模塊間的耦合。來源百度百科

1 依賴倒置理解

A調用B,A對B有依賴,這叫正向依賴。我們一個應用中,應用層會調用基礎設施層,這個時候應用層就強依賴基礎設施層。寫代碼順序是先寫基礎設施層再寫應用層。如下面代碼片段,一個根據訂單查詢服務,OrderQueryServiceImpl 在應用層,Orderepository 在基礎設置層;那麼依賴關係就是應用依賴基礎設置層,依賴導致方法,就是應用層定義好Orderepository接口,讓基礎設施層去實現;應用層只依賴接口,這個就依賴倒置。這麼設計的好處是什麼呢?未來基礎設施有什麼變化應用層不感知這個變化,同時和基礎設施層解耦了。spring 容器 實現依賴注入,所依賴的對象直接由 IoC 容器創建後注入到被注入的對象中,依賴的對象由原來的主動獲取變成被動接受,所以是反轉。

public interface OrderQueryService {
    /**
     *  根據訂單Id查詢訂單
     */
    Result<OrderDTO> getOrder(String orderId);
}

public class OrderQueryServiceImpl implements OrderQueryService {
    @Resource
    private Orderepository orderepository;
    @Override
    public Result<OrderDTO> getOrder(String orderId) {
        //校驗
        //查詢
        OrderDO orderDO= orderepository.getOrder(orderId);
        //轉換
        return Result.succ();
    }
}

下面再看下面這個例子,Person依賴了Vehicle這個是正向依賴,那麼如何實現人類和汽車解耦呢?那麼就是搶奪接口的控制權,即人類搶到drive控制權,人類具有駕駛的能力,這個時候Person 和Vehicle 就解耦了。

//車輛
public interface Vehicle  {
}
// 卡車
public class Truck implements Vehicle {
}
//小汽車
public class Car implements Vehicle {
}
// 人類駕駛交通工具
public interface Person {
    void drive(Vehicle vehicle);
}

// 下面依賴倒置,解耦做法

public interface Driveable {
}
// 小汽車實現了人類接口
public class Car implements Vehicle , Driveable{
}
public interface Person {
    void drive(Driveable driveable);
}

參考文獻
[1]https://www.cnblogs.com/chenssy/p/9576769.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章