依赖倒置怎么理解倒置_依赖倒置:结构对数

依赖倒置怎么理解倒置

重新检查收益。

通过传递依赖性的腐蚀滴水管道,涌出涟漪效应 。 程序员有时会度过艰苦的日子,爬上黑暗的高层建筑管道迷宫,其原因无非就是消除一些可传递的依赖关系,以使变更成本的可预测性得到改善( 放大提供了主要动力)。 经过长时间的休养之后,经常返回的那些程序员在新装束中瞥见了古老的原理。

考虑图1的spoiklin图 ,其中三个方法a()b()c() –调用实用程序方法d() ,而后者又调用了另外五个方法。

图1:九种方法的简单系统。

图1:九种方法的简单系统。

图1中出现了多少个传递依赖项? 这本质上是在问我们从上排到下排有多少种方法。 从a()d()只有一条路径,但是从d()存在五个可能的选择。 方法a()可以通过以下五种方法达到最低要求:

  • a() → d() → e()
  • a() → d() → f()
  • a() → d() → g()
  • a() → d() → h()
  • a() → d() → i()

因此,存在五个从a()到达的传递依赖项,以及从b()c()到达相同的值,总共3 x 5 =15。通常,这种配置(其中n个元素最终取决于m个元素)生成nxm传递依赖。

现在考虑程序员希望进一步保持三种客户端方法与实用程序方法d() 。 为此,程序员取消了闪闪发光的依赖关系反转原理,并使用抽象的d()方法将新接口切成斜线,然后具体类将实现该方法。 图2显示了生成的系统。

图2:依赖倒置。

图2:依赖倒置。

在图2中,相同的三个方法a()b()c() –在下面通过新接口调用实用程序方法d() 。 实现实用程序方法的具体类还具有d() ,该类上没有依赖项(客户端调用接口方法,而不是具体方法),因此具体d()出现在第一行,虚线显示它的继承依赖于下面的相应接口方法。

图2包含多少个传递依赖项? 最上面的所有四个方法都在下面的抽象d()处终止,产生四个可传递依赖项。 上面的具体方法d()对原始的底行方法也有五个依赖项,使传递依赖项的总数达到九个。

但是请注意,已经发生了根本性的结构变化。 现在,传递依存关系的数量可以表示为总和而不是乘积。 也就是说,原始系统生成了3 x 5的传递依存关系。 新系统生成3 + 6传递依赖。 通常我们可以说,在n个原始元素最终依赖于m个原始元素的情况下,上述依赖项求逆会将传递性依赖项的数量从nxm减少n + m + 1 。 如果nm大,则可以节省大量资金。

正如数学对数通过将乘积减去一个乘积来减轻计算负担一样,依存性反转原理也可以帮助减少从乘积到乘积的可传递依存关系的数量。 此外,依赖反转原理的这种应用还降低了系统的深度 ,“深度”是系统传递依赖的平均长度。 在图1中,所有传递依赖项的长度均为3; 在图2中,它们都是两个元素。 考虑到涟漪效应会在大量的传递性依赖关系中泛滥成灾时造成最大的破坏,因此依赖关系反转原理似乎是一个双重的好处。

摘要

古老的棘手原则有时会令人惊讶。 依赖倒置原则长期以来赢得了程序员的尊重,因为它在打破原本没有润滑的系统的刚性和脆弱性方面的能力。 然而,这并不能完全反映其力量范围。 从纯粹的结构角度来看,它可以用于减少在程序中蠕动的传递依赖项的数量和长度。

参考: 依赖反转:我们的JCG合作伙伴 Edmund Kirwan在关于软件A博客上 的结构对数 博客。

翻译自: https://www.javacodegeeks.com/2014/03/dependency-inversion-the-structure-logarithm.html

依赖倒置怎么理解倒置

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值