依赖注入(DI)与控制反转(IOC)

为什么需要DI,见Asp.net core in action第二版 第十章

随着DI的频繁使用,要实现IOC,会有很多重复代码,甚至随着技术的发展,有更多新的实现方法和方案,那么有人就把这些实现IOC的代码打包成组件或框架,来避免人们重复造轮子。

所以实现IOC的组件或者框架,我们可以叫它IOC Container。

IoC是一种很宽泛的理念,DI是实现了IoC的其中一种方法。

微软怎么说:

ASP.NET Core supports the dependency injection (DI) software design pattern, which is a technique for achieving Inversion of Control (IoC) between classes and their dependencies.

地址:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-2.2

翻译过来就是“ASP.NET Core支持依赖注入(DI)的软件设计模式,该模式是一种在类和它依赖的对象之间实现了控制反转(IoC)的技术”。

如果有人觉得辣鸡微软不够权威,那我们去看下IoC以及DI这两个概念的发明人——Martin Fowler怎么说:

几位轻量级容器的作者曾骄傲地对我说:这些容器非常有用,因为它们实现了控制反转。这样的说辞让我深感迷惑:控制反转是框架所共有的特征,如果仅仅因为使用了控制反转就认为这些轻量级容器与众不同,就好象在说我的轿车是与众不同的,因为它有四个轮子。

因此,我想我们需要给这个模式起一个更能说明其特点的名字——”控制反转”这个名字太泛了,常常让人有些迷惑。经与多位IoC 爱好者讨论之后,我们决定将这个模式叫做”依赖注入”(Dependency Injection)。

地址:http://insights.thoughtworkers.org/injection/

Martin Fowler说的比较委婉,其实说白了就是建议我们,不要乱用IoC装逼,IoC是一种设计理念,很宽泛,你把程序里的一个写死的变量改成从配置文件里读取也是一种控制反转(由程序控制反转为由框架控制),你把这个配置改成用户UI界面的一个输入文本框由用户输入也是一种控制反转(由框架控制反转为由用户自己控制)。

所以,如果确定讨论的模式是DI,那么就表述为DI,还是尽量少用IoC这种宽泛的表达。

SQL Server LocalDB

是SQL Server的一个超级精简版本,它适合只想学基础的SQL和T-SQL的同学;或用于完成只在本地运行的大作业。

而对于想学好SQL Server本身的同学来说,配置服务器的网络是非常重要的环节,无法跳过不学。

ODBC

开放数据库连接(Open Database Connectivity,ODBC):解决异构数据库间的数据共享而产生的,

数据库管理系统(DBMS)

RDBMS 关系数据库系统

ODBCOpen Database Connectivity,开放数据库互连)提供了一种标准的API应用程序编程接口)方法来访问数据库管理系统(DBMS)。

与具体的编程语言无关,与具体的数据库系统无关,与具体的操作系统无关。