【Vtt2Srt】IoC, DI, DIP

IoC: Inversion of Control

DIP: Dependency Inversion Principle (SOLID当中的D)

DI: Dependency Injection

每当看到这些词,总觉得它们是差不多的。但它们之间应该还是有些细微的差别的。

以下只是根据自己的理解,如果哪里错了,还望指正。


IoC:

  • 每当我们提到IoC,一般就是指IoC Container。例如Autofac。虽然这样的理解有点狭隘。
  • IoC是一种指导思想,关于控制反转的指导思想。一般思想之类的都是站在很高的高度。现在的图形界面程序就是IoC的一种体现。以前计算机执行程序一路到底,但现在控制流程完全被用户操作反转了。
  • 当我们使用IoC Container的时候,一定要刻意的把class分成Newable和Injectable。IoC Container可以很容易的提供Injectable的class实例,但不太容易提供Newable的class实例。例如,一个class的构造函数需要一个string类型,IoC Container并不知道提供什么样的string。关于这点,我们还会进一步讨论讨论。

DIP:

  • Bob大叔总结的SOLID当中的依赖倒置原则。Bob在讲解这个原则是用了一个copy小程序的示例。我们先把上层需要什么的依赖进行抽象,然后底层在去实现这样的抽象。并不是先实现底层的功能,然后上层再使用底层提供的功能。这是一种思考问题方式的转变。
  • DIP是一种原则,没有很具体的技术可以直接搬用。

DI:

  • Dependency Injection包含的内容也可以很宽 (可以参考这本书Dependency Injection in .NET
  • DI提供了一些具体的技术来帮助我们编写松耦合(Loosely Coupled)代码。但最常用的还是构造函数注入。

IoC包含的范围应该大于DIP,DIP包含的范围应该大于DI。

我们确实需要好好考虑怎样管理Dependency,因为我们写代码每时每刻都要遇到。

如果理解了DI,确实会提高我们的代码质量,也增加了可读性可维护性可扩展性可测试性

猜你喜欢

转载自blog.csdn.net/zbbfb2001/article/details/79805017
今日推荐