反复读了几遍王咏武的《向依赖关系宣战——依赖倒置、控制反转和依赖注入辨析》
再次感受到自己要学的东西真的很多,废话不多说。下面阐述几个实例:
1
比如a框架要使用b框架,为了隔离这两个框架,就要在中间引入一个mid框架。
为了防止a框架过分依赖于mid框架,就需要a框架总结出要用到的接口,而由mid框架实现
2
不要让下层框架依赖于上层框架。
比如a框架中调用b框架的func1,然后b框架的func1调用a框架的func2,这样b框架就对a框架产生了依赖。应该在调用func1的时候传入一个函数指针p,然后func1调用这个p。
又比如a框架中调用b框架的func1格式化一个string再返回一个string,而如果在func1中指定b框架的某个 formatter,func1就和具体的formatter产生了依赖,应该在调用的时候给func1传入一个formatter,而func1根据这 个传入的formatter格式化string返回。
这些比方好像不容易看懂,反正自己写着玩,自己看,嘻嘻
平时自己有时候也会无意识地解这些不必要的耦合,有时候又没有,以后写程序的时候真应该在任何时候想一想程序之间的耦合关系
有时候,选择一个合适的IoC框架,如.net下的Windsor,JAVA下的Spring,PicoContainer可以让程序之间的耦合更少。
关于Martin Fowler的《Dependency Injection》中讲的Service Locator,我还没有看懂。。。