加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

依赖倒置像金鱼,好看但难养

发布时间:2020-12-14 02:16:20 所属栏目:百科 来源:网络整理
导读:依赖倒置像金鱼,好看但难养 依赖导致是解耦的核心之一,但它就像金鱼一样,看着好看,缺很难伺候。 ================ 依赖倒置 - 面向接口编程 。(是不是一下变得高大上了?) 依赖倒置的核心:模块之间的依赖通过抽象(抽象类、接口)产生 上一章我们聊了

依赖倒置像金鱼,好看但难养

依赖导致是解耦的核心之一,但它就像金鱼一样,看着好看,缺很难伺候。

================

依赖倒置 - 面向接口编程。(是不是一下变得高大上了?)

依赖倒置的核心:模块之间的依赖通过抽象(抽象类、接口)产生

上一章我们聊了继承,这章聊实现。

我理解的面向接口编程

字面意思,是通过接口产生依赖关系。实现类不直接发生交互。那么接口是什么呢?

接口是规则的集合

接口设定了一系列的规则,面向接口编程就是 面向规则编程

再简单说下什么是规则。规则就是类A你要给我提供getX方法和setX方法,至于你怎么实现,我不管。规则我给你定好了,你实现吧。

那么这样做的好处是什么呢?

就好比地球上大国的高层领导,领导和领导们之间玩的都是规则,他们在上层发号命令。下面的小兵兵们实现就好了,只有小兵兵们怎么做,他们才不管呢,这是小兵兵们需要考虑的问题。每一年的情况都不同,所以每一年同一个命令的实现方式也不同,作为小兵兵的要为上层考虑,不能让他们“劳心尽力”,考虑这些小问题。所以上次并不知道每一年他命令的实现都不同。这就保持了稳定!

看!面向接口编程的目的是实现解耦,解耦的目的是保持修改的最小化,保持稳定。

面向接口编程是不是太棒了?

说的永远比唱的好听。这回,我们从坏处开始讲:

面向接口编程的贯彻者:MVP架构

MVP应该是现有架构里,面向接口编程最彻底的了。M-V-P三层为了实现最大程度解耦,全部采用接口实现依赖。设想是好的,实际也是有好处的。但真正的实践者依然很少,因为它优点是那么诱人,但缺点是却是那么致命!!

人不是万能的,不可能提前想好所有的规则。需求也是多变的,不可能保持稳定。(虽然MVP就是应对需求多变的)

面对规则设定的不稳定,直接现象就是接口大规模变动。而更多时候,很可能是三层接口跟着变动。三层接口跟着变动的后果就是,三层的实现类需要跟着修改。你能想象这有多么痛苦吗?

当然必须要承认的是,一旦架构稳定下来,步入中后期维护,MVP带来的优点将会逐渐体现出来。就好像LOL里的后期英雄一样。

真实场景中的依赖倒置

其实不说MVP架构,真正的项目中,除了独立库以外,符合依赖倒置原则的地方也并不多。(后端架构不太清楚,但客户端至少是这样)。

毕竟接口的设计成本也是很大的,而业务需求的变动往往也有没有想象中那么大,直接修改实现类的成本有时反而是很小的。

所以实际项目中并没有必要一定遵循依赖倒置原则,考虑一下这真的是必须的吗?

但是在边写依赖库时,对门面的设计,还是要面向接口,对内部信息做隐蔽。

依赖倒置的好处

说了半天,依赖导致好像变成一个花瓶一样的东西。但他还是有很大好处的,只要我们注意使用就行。

  • 一个被多处依赖的对象,应该以面向接口编程设计。

    一个被多处依赖的对象,如果需要修改,深入多个类修改的代价是非常大的。这个时候如果引入接口或抽象工厂模式,这样的问题就被完美解决了。

  • 面向规则,屏蔽规则以外的东西。

    一个实现类除了接口所需的方法以外,还会有很多自己的公共方法,这些方法暴露给上层模块是不安全的,通过接口,则可以将这些不应该暴露的方法隐藏起来。

  • 里氏替换

    接口依然适用于里氏替换,这将对软件设计提高很大的灵活度。

结论

从我个人的角度,是拒绝依赖倒置的大面积普及的。但我依然很喜欢依赖倒置,在一些规则稳定的场景,依赖倒置不失为一把解耦利器!!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读