- 热门文章:
- · .net关于企业Excel报表的生成
- · 使用 Visual C# .NET 在 ADO.NET 中以编程方式构建连接字符串
- · 让用户通过宏和插件向您的 .NET 应用程序添加功能
- · Visual Basic.NET和GDI+共创图标编辑器
- · Visual Basic .NET 中动态加载类 (三)
- · Visual Basic .NET 中动态加载类 (二)
- · Visual Basic .NET 中动态加载类(一)
- · 我的.Net下应用程序发布问题的简易解决方案
- · 关于自定义事件的一点体会
- · .net 中的事务总结
- · .net中一些所封装的类
- · .Net 下对SqlServer2000中的存储过程的调用
上一篇:创建分布式应用程序学习心得 >>
基于组件的.NET软件开发(1)
前言
随着软件技术的飞速进步,现代的大型软件都广泛采用了基于软件组件的开发方式。以成熟的CBD(Component Based Design:基于组件的系统设计)理论为指导,在对系统的分析与设计完成之后,系统开发体现为复用已有组件、开发新组件以及将所有组件装配起来的过程。J2EE大规模地使用各种组件构照复杂的企业信息系统,获得了巨大的成功。
作为后来者,.NET framework汲取了J2EE的成功经验,在组件化开发方面有着自己独到的设计,在本文中,我们将介绍.NET组件化开发技术的最重要的两个范畴:混合语言开发与组件反射。笔者有充分的理由确信读者在了解了.NET的强大组件开发功能之后,一定会对.NET framework的设计和开发者敬佩不已,并会激起应用.NET来开发软件系统的强烈兴趣。
混合语言开发
Java语言跨平台的设计,是J2EE在企业级系统中占据优势的重要原因,为了与J2EE竞争,.NET framework在设计体系结构上采用了分层的设计模式,从而在理论上使跨平台成为了可能(事实上,已有真实可用的系统,MONO就是运行在非Windows操作系统之上的.NET framework),.NET设计师们还发现了J2EE的一个死穴——J2EE组件必须用Java语言开发!这种使用语言上的“独裁”无疑让喜爱其它语言的程序员们很不高兴。为此,.NET在软件开发史上首次在设计软件运行平台时就考虑到了混合语言开发,在笔者看来,这真是一次影响深远的技术变革。
本文不打算全面介绍.NET framework中混合语言开发的内部机理,而只是从应用角度,通过几个短小却典型的实例,来看看我们如何在一个工程中集成多种语言开发的.NET组件。
组件的组合
当我们需要复用已有的组件的功能来开发新系统时,我们经常让新开发的组件简单地包容另一个已有的组件,以达到代码重用的功能,这种开发方式在面向对象设计理论中被称为“组合”。我们看看一个小例子:
我们要设计一个C#组件,其接口如图1所示:
图 1 C#组件的UML图示
打开VS.NET,创建一个C#类库工程:CSharpComponent,删除原有的Class1,往工程中添加一个新类CSharpClass,在其中增加一个函数SaySomething,代码如下:
public void SaySomething(string str)
{
MessageBox.Show(" 这是 C#实现的功能,传入的字串是:"+str);
}
然后,从菜单中选“生成”à“生成解决方案”,编译完成后会生成一个动态链接库:CSharpClass.dll。
现在,我们已有了一个可复用的软件组件,虽然它的功能简直不值一提,但它的的确确是一个软件组件,在本质上与那些卖上几千美元的商业组件并无区别。
在这里我们需要明确:CSharpClass.dll实际上可以称之为组件库,而类CSharpClass则可以看成是一个可以复用的组件。显然,一个组件库(DLL文件)可以容纳多个组件(即完成某种功能的类)。
接着我们再创建一个Windows应用程序项目,但这时我们用的不再是C#,而是VB.NET了。我们给工程起名为:VBTestComponent,从工具箱中把一个按钮拖到窗体上,我们打算在用户单击此按钮时,让它直接调用C#组件 CSharpClass.dll中的SaySomething()方法,并从VB中传送一个字串给此方法。
为了能使用开发好的C#组件,我们必须给VB工程添加对CSharpClass.dll的引用。在解决方案资源管理器窗口中的项目节点:VBTestComponent上右击,从弹出菜单中选:“添加引用…”,将出现以下窗体:
图 2 添加对C#组件CSharpClass.dll的引用
单击“浏览…”按钮,找到CSharpClass.dll,确定后如图2所示。单击“确定”按钮关闭窗口,现在,我们就给VB工程增加了一个对C#组件的引用,可以在解决方案资源管理器窗口中很清楚地看到这点:
图 3 添加了对C#组件引用后的“解决方案管理器”
后面的事情就很简单了,在按钮的单击事件中书写以下代码:
Private Sub Button1_Click_1(……) Handles Button1.Click
Dim obj As CSharpClassNameSpace.CSharpClass
obj = New CSharpClassNameSpace.CSharpClass()
obj.SaySomething("我是从VB中调用C#组件中的方法而出现的。 ")
End Sub
OK,我们现在就实现了在VB中调用C#组件的功能,这简直太简单了吧!
聪明的你这时脑瓜一定在转了:既然从VB中可以这么容易地调C#组件,那么,反过来也一定行。或者,我可以做一个VB组件,然后,它又调用一个C#组件,而C#组件又可以调用某个C++开发的组件,……,调来调去,浑然一体。当代愚公曰:“子子孙孙无穷尽也,何愁项目完不成?!”
现在再不用强迫所有程序员在一个项目中都用一种语言了,尽可以给每人分配一个独立的组件,让他们用自己喜欢的语言去开发,只要遵守事先定好的接口就行了。
笔者回想过去使用VB来调用Win32 API的惨状,不禁欢呼那种痛苦的日子一去不复返了!
下一篇:.net关于企业Excel报表的生成 >>
相关文章:
- · .Net 下对SqlServer2000中的存储过程的调用
- · .NET组件和COM组件之间的相互操作
- · 权限管理工具的使用方法
- · .net关于企业Excel报表的生成
- · .NET Test Driven Development
- · 使用 Visual C# .NET 向 Microsoft Excel 2002 传输 XML 数据
- · Remoting编程知识二
- · Remoting编程知识一
- · 在.net中轻松掌握Windows窗体间的数据交互
- · .NET里面的Interop太烂了
- · .NET中的设计模式五:观察者模式
- · .NET Framework 2.0 beta 新特性
- · 把.NET程序部署到没有安装.NET Framwork的机器上
- · 对使用net程序架构开发的一点点儿
- · 在.NET下获取硬盘序列号的问题
- · 在.net中Oracle日期类型的处理
- · 由C++转向C#:我们需要注意哪些方面的变化?
- · 如何保护我们的 .NET 程序集?
- · 初级:.net框架下的MD5
- · .net下软件的自动升级--上传
- · 针对 .NET 框架的安全编码指南
- · .NET框架类命名空间
- · .Net框架程序设计(一)----进阶
- · .NET中的设计模式二:单件模式
- · .Net的注册表操作
- · [GDI+] ColorMatrix 彩色矩阵
- · 在.NET中实现彩色光标,动画光标和自定义光标
- · .Net框架下的XSLT转换技术简介
- · NET Framework 工具
- · 充分利用 .NET 框架的 PropertyGrid 控件
- · 把.NET程序部署到没有安装.NET Framwork的机器上
- · ADO连接数据库字符串大全
- · 在 Visual C# .NET 中建立一个平滑的进度条
- · FlyTreeView for ASP.NET 3.1 破解手记
- · 如何检测电脑是否安装了.net framework
- · .Net平台下开发英文语音应用程序
- · 按照指定大小,生成缩略图
- · .net探针
