在学习enterprise library的时候,注意到了v4.1 新增了Unity Application Block这个东西,然后接触到了Dependency Injection. Ioc这样的概念

IOC:反转控制

DI:依赖注射

 看了很多人的介绍以及相关设计模式的解说~ 总觉得这些个概念太玄了


拿有个人的说法先做引子

/*
以前编程就像我们按自己的一套标准(身高,体重等)去找女朋友,相当与new
而ioc呢,就是把我们的要求给一个中介,让他来帮我们找适合我们要求的人
*/

这里我说明白一点
应该是我们把我们的要求写在一个interface里面,然后中介按照这个interface去找在他那里登记过有符合interface条件的人
当然这只是实现方式的一种,通过interface来注册,unity里面支持interface,instance等注册
------------------------------------------------------------------------------

对于ioc,我的理解就是工厂模式的一种非正常途径的升华

对工厂模式,基本上是一个接口对应一个工厂,如果有很多接口杂整? 那不是工厂也是一大堆,当然,可以用一些控制字符来设置一下,合并一些工厂

但是unity呢,貌似就是先建立一个超大的哈希表, key就是interface,value则是class.当这个哈希表建立好了以后,怎么用呢,就这样用~

interface a = container.getInstance(interface);
a.function();

这样就得到了你所需要的class的instance了,你也不用去管什么工厂了,只要知道你需要的class是实现了某个interface,把这个interface给container,就返回了对应的类

甚至更玄的,呵呵,如果你的class中包含了其他的class的instance为成员,container会自动生成那个class的instance哦,这点可能就是所谓IOC的精髓吧,耦合度又低了很多


正如企业库文档所说
The Unity Application Block implements a dependency injection container named UnityContainer and exposes methods to register mappings between interfaces or classes (typically base classes or abstract classes) and concrete types (both instance and singleton types), get instances of objects, and build up existing objects with dependent object instances.

对使用container的程序员很方便,但是大部分工作给了构造container的人,因为要把interface和class在container注册,应该是蛮复杂的工作

但是看了 Unity 觉得不好用,因为这个映射关系最好的方式当然是放在配置文件里,可没有一个图形化的工具,全部都得手工code ,累,而且又没有保障,不知道其他的软件是怎么设计的,spring是基于ioc的吧,有人可以解释下不 ,如果纯用手工来做映射文件,修改测试都很麻烦啊,这样打击了我准备使用 Unity 的决心.


好了,这就是我对ioc&DI&unity的理解,呵呵,估计有不少不对的地方,希望有人能指正啊!

enterprise library很多东西,慢慢的学习吧

pas, to be the patch for sap
posted on 2009-10-15 22:15  YoungSin  阅读(190)  评论(0编辑  收藏  举报