为什么我们需要IOC框架, 与依赖倒置原则有什么关系?
这种设计被称之为 Naive Design。 一旦业务层依赖的任何一个模块发生变化,都会影响到业务层。变化通常是引入错误的原因。
那么我们以依赖倒置的原则来重新设计,得到下图中的结构:

?这样是不是业务层就非常独立了。
?但是,是不是有点晕了。这是怎么做到的呢? 来看一段简单的示例:
可以看到 Business 没有依赖任何工程,DataAccess依赖了Business,Client也就是OrderService的调用方,同时依赖了Business和DataAccess。?
你可能已经注意到了,?IOrderRepository的接口定义在Business中,而在DataAccess中实现了这个接口。这样就实现了依赖倒置。这样做有什么好处呢,因为IOrderRepository接口的使用是Business提出来的,它只需要知道我要使用这个接口,而不用关心实现,这样就把实现的变化封装在了DataAccess中。这也体现了OO设计中最重要的两个原则:封装变化,面向接口编程。
?
在使用OrderService的地方,也就是client中,我们创建一个OrderRepository,并作为OrderService的参数传入。代码如下:
static void Main(string[] args) { var orderRepository = new OrderRepository(); var orderService = new OrderService(orderRepository); }为什么不让OrderService自己创建OrderRepository呢?这样明显会导致双向依赖么。
?
每次创建OrderService的时候都要new一下OrderRepository,烦不烦。于是就有了IOC框架,帮我们自动创建一个OrderRepository,并注入OrderService。
?
回头再想想,如果你的项目是正向依赖关系。用IOC框架有意义么? 达到解耦的目的了么?