拼吾爱程序人生

首页 » .Net编程 » Visual Studio.NET » Framework之外的IoC
cobra - 2008-9-28 22:06:00
IoC (Inversion of Control)是什么?软件设计大师已经作出了很多定义。这里,我从组件开发的角度来谈什么是IoC-“IoC是一种设计模式,当系统由多个组件(Component)构成时,它能消除组件间的直接依赖关系,让组件的开发更独立,使用更灵活”。

IoC是Framework的基本特征,但IoC并不专属于Framework设计范畴,它在需要消除组件依赖的地方都能发挥作用。

下面举一个开发实例:需要开发一个计算器组件,实现整数加法运算,计算过程将记录log。


针对上面的需求 ,我们开发第1版的程序:

Code


上面的程序编译成组件Calculator.dll,它将引用另一个组件Log.dll(可能为第三方,也可能是自己开发)。这样做的问题在于:

a. Calculator.dll对Log.dll是直接依赖关系,缺少Log.dll,Calculator的开发无法独立进行;

b. 如果其他组件User.dll需要使用Calculator的功能,它除了引用Calculator.dll外,还必须引用Log.dll。User.dll可能只需要Calculator的加法功能,不需要记录log,或者是希望把log重定向到其他地方,但Log依赖被牢牢钉在了Calculator内部,造成了User.dll使用Calculator不方便。

通过IoC,我们来解决上面的问题,下面是第2版:

Code


从代码中看到,Calculator依然拥有Log逻辑,但它不再直接依赖Log.dll了,它把对具体Log的依赖选择权交给了User.dll:

Code


通过IoC,在第2版中Calculator的开发变得独立;对Calculator的使用变得灵活。

进一步的思考:为什么Calculator内部不采用interface,而是delegate来表达Log功能?如果采用interface存在怎样的问题?有兴趣的朋友可以从实际开发使用的角度探讨!

文章开篇定义了IoC,最后再从依赖抽象和具体依赖建立的角度定义IoC:“IoC是一种设计模式,符合IoC模式的组件通过接口或委托等方式对依赖进行抽象,消除对其他组件的直接依赖,而具体的依赖关系由组件的使用者负责建立”。





(文/weidagang2046  出处/博客园)

 您可能对 [Visual Studio.NET] 的这些文章也感兴趣:

Blend 2 SP1 的 Itellisense 失效的解决办法
COM组件开发实践(五)---From C++ to COM :Part 2
在 Visual Studio 中对断点进行分组管理
MSBuild扩展包带来170个构建任务
VS2008下使用托管代码控制Windows Mobile Device Emulators
Microsoft .NET Framework & Micro Framework ZigBee Librar
XNA 粒子系统入门
Enterprise Library深入解析与灵活应用(5)
SCSF 系列:Smart Client Software Factory 简介、安装及通过模板新建项目
.NET 4.0: Type Equivalency (1):Byebye,PIA
1
查看完整版本: Framework之外的IoC
Modify by pin5i DZNT_ExpandPackage 2.1.3258 2007-2008 pin5i.com
  Total Unique Visitors: