软件解耦

什么是软件解耦

简单的讲

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

就像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

你可能感兴趣的:(软件解耦)