ABAP设计模式之---“依赖倒置原则(Dependence Inversion Principle)”

1. 定义

代码设计应该依赖于抽象,不应该依赖于实现细节。

换句话说,抽象不应该依赖于细节,细节应该依赖于抽象。说白了,就是要针对接口编程,而非对实现编程。

2. 解读

  • 依赖倒置原则其实是面向对象设计的标志,用那种语言实现并不重要,如果编写程序时,考虑的都是如何针对抽象编程,而非是针对细节编程,即程序中所有的依赖关系都终止于抽象类或接口,那就是面向对象的设计,反之就是过程化的设计。
  • 为啥叫“依赖倒置”?其实这个名字来源于对于调用关系,调用方(consumer)不再直接依赖于服务的提供方(service provider),相反,调用方和服务的提供方都依赖于交互的接口。
  • 我个人的理解是,抽象来源于细节,因此从常识上讲,抽象应该依赖于细节。但我们应当知道,理论(抽象)来源于实践(细节),但高于实践。从实践中总结出理论后,应该用“理论进一步指导实践”,也即实践(细节)依赖于理论(抽象),依赖关系倒置。
  • 抽象是稳定的,细节是多变的。让依赖终止于抽象,才能在设计上保障程序的稳定性。
  • 在实践中,调用方将不再直接实例化提供方的对象,而是通过CREATION METHOD实例方法来得到依赖的对象。例如通过工厂方法、抽象工厂、原型模式等将实例化的动作与服务相分离。调用方只依赖于CREATION METHO返回的接口对象,而非直接依赖于对象实体。
  • DIP其实在一定程度上,是用增加代码复杂度的方式,换取了代码间依赖的灵活性。
  • 测试隔离(Test Isolation)是DIP的最好体现,也即用Factory-Injection的模式,实现了Test-Double的注入。

3. 举例

3.1 测试隔离(Factory-Injector Pattern)

Client在访问服务类Service Provider时,仅可通过Factory类得到Service Provider的实例,Factory返回的实例是Service Provider的接口对象。

因此Client与服务提供方,仅依赖于Service Provider的接口。当service provider发生变化时,client方无需改动任何代码,不受任何影响。

此外,通过Injector类的引入,可以在测试代码中替换掉Factory返回的Service Provider实例,也即实现test double。

>本博客专注于技术分享,干货满满,持续更新。
>欢迎关注❤️、点赞👍、转发📣!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP-nkGavin

给作者赏杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值