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

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

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


迷途吧
145 声望25 粉丝

看见好文章就翻译一下,发现一些细节就分享一下,也许没什么技术,只希望能被需要的人搜到。


引用和评论

0 条评论