美文网首页
软件解耦

软件解耦

作者: decoding | 来源:发表于2017-01-21 19:34 被阅读0次

什么是软件解耦

简单的讲

解耦就是我不需要知道你是谁,你也不需要知道我是谁。

就像10086一样,我们不需要知道每次是哪位客服MM接听,而客服MM也不需要知道她服务的对象是谁。

软件中举个例子就是,经常需要对业务报文进行处理,处理完了如果需要发送,我们只需要调用发送接口,而这个接口是通过空口、电口、光口将报文发送出去,我们根本不CARE。而空口、电口、光口也不会CARE他们发送的是什么东西。

为什么要软件解耦

软件解耦的本质是提高各模块的内聚性,降低模块间的耦合性,以应对极其复杂的需求变化。

比如某产品针对市场需求需要马上推出个MINI版,需要裁剪掉基础版本的一些高级功能特性,在裁剪中发现直接将高级功能裁掉,程序根本不能运行,然后投入大量的人力分析、开发完成这个MINI版本。如果解耦设计的比较好的话,这方面投入的人力趋近于0。

常用软件解耦方式

依赖倒置(Dependence Inversion Principle)

高层模块不应该直接依赖底层模块,他们都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖抽象。

《资本论》中都曾阐释依赖倒转原则——在商品经济的萌芽时期,出现了物物交换。假设你要买一IPhone,卖IPhone的老板让你拿一头猪跟他换,可是你并没有养猪,你只会编程。所以你找到一位养猪户,说给他做一个养猪的APP来换他一头猪,他说换猪可以,但是得用一条金项链来换——所以这里就出现了一连串的对象依赖,从而造成了严重的耦合灾难。解决这个问题的最好的办法就是,买卖双发都依赖于抽象——也就是货币——来进行交换,这样一来耦合度就大为降低了

简单的说就是,当有依赖关系是,尽量依赖抽象的接口而不是具体细节实现。而对外提供功能是也提供抽象的接口,而不是直接暴露内部实现。

控制反转(Inversion of Control)

当我们使用开发框架时,开发框架就是作为服务方,而我们自己编写的业务应用就是客户方。当Client调用server时,这个叫做一般的控制;而当server调用Client时,就是我们所说的控制反转,同时我们也将这个调用称为“回调”。控制反转跟依赖倒置都是一种编程思想,依赖倒置着眼于调用的形式,而控制反转则着眼于程序流程的控制权。

比如你去下馆子,你是Client餐馆是server。你点菜,餐馆负责做菜,程序流程的控制权属于server;而如果你去自助餐厅,程序流程的控制权就转到Client了,也就是控制反转。

总结

解耦,即面向接口、抽象进行编程,降低模块间的耦合性。

参考资料,如有侵权,请联系我删除,多谢!

https://www.zhihu.com/question/20821697

相关文章

  • 软件解耦

    什么是软件解耦 简单的讲 解耦就是我不需要知道你是谁,你也不需要知道我是谁。 就像10086一样,我们不需要知道每...

  • Android插件化框架 RePlugin 初探

    为什么要使用Android插件化框架? 写软件时,软件的扩展性至关重要。而软件的扩展性跟其代码的解耦程度相关。解耦...

  • Android-Jetpack-LifeCycle组件的使用

    在软件开发当中,解耦可能是永恒的话题。Android开发当中的解耦体现在系统组件的生命周期和普通组件之间的解耦,L...

  • 软件杂谈(1)- 解耦

    -前言- 软件杂谈是大叔打算写的关于软件的随笔系列,多数是在开车行路中冒出的想法,又怕年纪大了忘却,便记下来。 有...

  • 解耦

    解耦 对于大型重构, 最有效的手段就是 解耦, 解耦的目的使实现代码高聚合、松耦合。 解耦为何如此...

  • 20171127-03问题整理

    总摘要: 解耦. 接口降低. 架构. 2017-11-27摘要: 解耦. 接口降低. 架构. 1.为什么说解耦的...

  • 桥接模式

    桥接模式 1.桥接分离实现和抽象,提高了灵活性,促进软件解耦,两层可以独立解耦。2.桥接模式可以替换多次继承,从而...

  • 解耦

    今天小董给大家做了一个关于DMTP的精彩演讲,DMTP种种优秀的特性令我们这些听众叹为观止。 为何DMTP具有如此...

  • 解耦

    利用配置文件实现解耦 存在一个接口B 有3个实现类B1、B2、B3 在A类方法中需要调用B类实现代码: 此情况下,...

  • DDD 中的事件总线 (一)

    DDD 为什么需要event bus? 简单的说就是 解耦 ,无论是本地聚合间的解耦,还是微服务间的解耦. 没有e...

网友评论

      本文标题:软件解耦

      本文链接:https://www.haomeiwen.com/subject/cflnbttx.html