架构设计-依赖倒置原则

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

Supongo que te gusta

Origin blog.csdn.net/huangshanchun/article/details/105883815
Recomendado
Clasificación