基于组件的.NET软件开发
前言
随着软件技术的飞速进步,现代的大型软件都广泛采用了基于软件组件的开发方式。以成熟的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所示:
<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype>
![]()
图 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软件开发项目(源码):深入理解与实践》 .Net软件开发项目,以其高效、跨平台的特性,成为众多开发者的选择。本项目基于C#语言,结合了锐信软件开发平台,旨在提供一个全面的、可扩展的开发环境,让开发者能够...
介绍.NET组件编程技术,包括自定义控件、混合语言开发与动态组件插拔
1.5章节提到了ArcGIS软件开发套件(SDK)和资源: - ArcGIS SDK提供了详细的文档、示例代码和工具,帮助开发者构建基于ArcObjects的应用程序。 - ESRI Developer Network网站是一个宝贵的资源库,提供最新的开发信息...
1. ASP.NET框架:ASP.NET是微软推出的Web应用程序开发框架,支持.NET Framework或.NET Core。它提供了丰富的服务器控件、事件驱动模型以及自动页面状态管理,简化了网页开发流程。 2. MVC(Model-View-Controller)...
总的来说,Jeez Business Framework利用.NET框架的强大功能,结合模型驱动开发方法,为企业提供了一个灵活且高效的管理软件开发解决方案,不仅降低了开发难度,也提升了软件的可维护性和适应性。通过这个平台,...
1、基于 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发 2、采用MVC的框架模式,具有耦合性低、重用性高、生命周期成本低、可维护性高、有利软件工程化管理等优点 3、采用WebAPI,客户端完全摆脱了...
【基于ASP.NET开发的视频网站系统】是一种使用微软的ASP.NET技术构建的Web应用程序,它提供了丰富的功能,如用户互动的视频浏览、点赞、收藏、关注作者以及视频上传等。这个实训项目旨在帮助开发者深入理解和实践ASP...
在应用软件开发平台的选择上,Dreamweaver被用于前台网页的设计,它是一个可视化编辑工具,可以帮助开发者快速创建美观且功能完善的网页界面,与ASP.NET后端的结合使得前后台交互更为流畅。 在需求分析阶段,需要...
【基于ASP.NET的学生管理系统完整源码】是一款专为教育机构设计的管理软件,它利用了Microsoft的ASP.NET技术,构建了一个高效、稳定的网络平台,旨在优化学生信息的管理和操作流程。ASP.NET是.NET框架的一部分,提供...
这部分通常涉及ASP.NET的表格控件、文本框、日期选择器等元素,以及与数据库交互的ADO.NET组件。为了确保用户体验,页面可能使用了AJAX(Asynchronous JavaScript and XML)技术进行局部刷新,使操作更加流畅。 ...
Grove Develop Component结合可复用面向对象软件开发原理(泛指设计模式),注重提高软件开发中的代码重用率,并使软件开发架构清晰,有利于加快软件开发速度,减低软件维护成本. Grove Tool Kit 是针对Grove Develop ...
### 基于.NET的通用查询组件的开发 #### 概述 在当前的信息时代,数据库查询成为了大多数软件系统中的核心功能之一。然而,在实际应用中,为了满足不同子系统的查询需求,通常需要为每个子系统单独开发专门的查询...
总的来说,基于ASP.NET的BBS开发是一项涉及数据库设计、前端开发、安全策略、用户体验等多个方面的综合性任务,需要开发者具备扎实的编程基础和良好的软件工程思维。通过不断学习和实践,开发者可以构建出高效、稳定...
Grove Develop Component结合可复用面向对象软件开发原理(泛指设计模式),注重提高软件开发中的代码重用率,并使软件开发架构清晰,有利于加快软件开发速度,减低软件维护成本. Grove Tool Kit 是针对Grove Develop ...
【标题】"基于c#.net的小型画图软件"是一个使用C#编程语言和.NET框架开发的简单图形编辑工具。...对于学习C#和.NET开发的初学者来说,这是一个很好的实践项目,可以帮助他们理解如何将理论知识应用到实际的软件开发中。
1. **安装与配置**:首先,你需要安装Visual Studio作为开发环境,并确保安装了AutoCAD的.NET开发工具包。然后在项目中引用AutoCAD的COM组件,以便能够访问其对象模型。 2. **对象模型**:AutoCAD的对象模型是二次...
在软件开发过程中,我们遇到了许多重复机械的工作,例如数据持久层实现、日志、ASP.NET MVC、IOC以及自动映射等。这些组件的组合使软件系统的复杂度急剧上升,难以设计出一个均衡协调的框架。基于此,我们需要一个...
ASP.NET MVC(Model-View-Controller)是一种轻量级、基于组件的Web应用程序架构,它由微软开发并应用于.NET Framework中,为开发者提供了构建可测试、灵活且易于维护的Web应用的强大工具。本项目实例是针对初学者...
1. **ASP.NET MVC框架**:该系统采用MVC(Model-View-Controller)架构模式进行开发。MVC模式将应用程序分为模型、视图和控制器三个部分,各司其职,提高了代码的可读性和可维护性。模型负责业务逻辑,视图负责展示...