解耦的本质是什么?

对于解耦代码双方,使用约定好的接口来交换信息,此接口往往只有几个非常简练的约束,而不过于限制具体细节。

我向通信的对方发送了数据,或者发起了事件,如果不需要知道对方拿我的数据做什么用,怎么用,就是真正的解耦。
如果我的逻辑需要清晰的知道通信对方拿我的数据用来干什么,如果不知道会破坏逻辑,就不是真正的解耦。

正面例子:
C#中随处可见的委托机制。在特定的时机提供一个可供订阅的事件,事件订阅者有多少,订阅后他们会在触发时机做什么,对于事件发布者来讲都是不知道,并且也不关心的。
反面例子:
Blackboard模式。Blackboard保存着无数据的格式,任意对象可以向它写入数据,任意对象可以从它中读取数据。
Blackboard对存在它里面的数据没有任何识别能力,Blackboard也不需要知道关于它内部存储的数据的任何事情,就可以正常运作。
在这种情景下,其实做到了解耦的,是Blackboard自己而已,而不是通信双方。通信双方对对方可能不产生代码耦合,但是实际逻辑是耦合的。
逻辑明明是耦合的,代码却好像没有任何关系,这带来的只是更难理解的代码,弱化了类型约束,使编译器对明显错误的逻辑无能为力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值