Dependency Injection的优点及适用范围

Dependency Injection (DI) 就是在类之间的互相引用,都采用Interface来代替。后台有Container,每个Interface包含一个Object,实际上这是一个Singleton的概念,所以在使用Singleton的时候,要避免使用DI,虽然DI支持非Singleton,但是感觉逻辑上不太符合常理。
http://tutorials.jenkov.com/dependency-injection/dependency-injection-benefits.html
优点:
A. 减少依赖关系
通过Interface互相联系,这样两个组件之间关联少一些。
B. 更加方便重复使用
只要是Interface相同,组件可以在不同的场合中重复使用。
C. 更容易测试
Test 的代码不需要和使用代码有任何关联,设置好Container,然后组件就自动生成。与正常运行,完全相同的测试环境,不需要考虑构造函数等等。
D. 更容易阅读
只需看Interface即可,一旦测试封装结束后,不需要读里面的代码。
E. 减少Dependency Carry
就是如果在最底层的引用某个变量,需要从最顶层一点点传递下来,如果用DI,就可以跳过中间部分。这个说得是Singleton,如果顶层的变量有一些特定的值,无法从Container中生成的话,就没必要了。
什么时候适合使用呢?
http://tutorials.jenkov.com/dependency-injection/when-to-use-dependency-injection.html
还是先说,什么时候不适合吧?
A。永远不会有不同的Implementation的时候
B. 永远不会有不同的Configuration的时候
适合的情形:
同一个Dependency给多个Component
同一个Dependency有多个不同的Implementation,如果要改换的话,直接去Registar里边改即可。
同一个Implementation给不同的Configurations
需要Service的情形。
笼统的说,就是需要Service,一对多,多对一几种情形。一对一,不会改变的时候,不要用DI。

你可能感兴趣的:(Dependency Injection的优点及适用范围)