`
wodamazi
  • 浏览: 1419642 次
文章分类
社区版块
存档分类
最新评论

基于组件的.NET软件开发(1)

 
阅读更多

基于组件的.NET软件开发

前言

随着软件技术的飞速进步,现代的大型软件都广泛采用了基于软件组件的开发方式。以成熟的CBDComponent 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技术的管理软件快速开发平台

    极致业务基础平台(Jeez Business Framework,简称为JBF)基于Microsoft .NET开发技术和模型驱动架构,是面向业务应用的管理软件开发平台。极致业务基础平台不仅能够快速地开发应用软件,而且能够根据的用户需求快速...

    基于组件的软件开发_VB.NET&C#

    介绍.NET组件编程技术,包括自定义控件、混合语言开发与动态组件插拔

    基于XPO的.NET软件开发

    大名顶顶的XPO,一些基础知识的介绍..可以去官网下载组件

    Grove[.net开发组件包]

    Grove Develop Component结合可复用面向对象软件开发原理(泛指设计模式),注重提高软件开发中的代码重用率,并使软件开发架构清晰,有利于加快软件开发速度,减低软件维护成本. Grove Tool Kit 是针对Grove Develop ...

    Grove[.NET组件开发包]

    Grove Develop Component结合可复用面向对象软件开发原理(泛指设计模式),注重提高软件开发中的代码重用率,并使软件开发架构清晰,有利于加快软件开发速度,减低软件维护成本. Grove Tool Kit 是针对Grove Develop ...

    基于.NET的通用查询组件的开发

    在分析主要开发技术的基础上,介绍了如何在.NET平台下用C#语言开发一个实用的通用查询组件,详细叙述了该查询组件的设计方法、功能实现的部分程序代码.在实际数据库的应用系统中,各子系统在调用该组件时只要设置相应...

    ArcObjects GIS应用开发——基于C#.NET

    《基于ArcObjects与C#.NET的GIS应用开发》在广泛...《基于ArcObjects与C#.NET的GIS应用开发》可作为高等院校地理信息系统、测绘等专业的本科生和研究生的教材,也可供从事地理信息系统开发和相关软件开发人员阅读参考。

    基于asp.NET的小区物业管理系统文档.doc

    利用网络和数据库技术,结合目前硬件价格普遍下跌与宽带网大力建设的有利优势,应用Active Server Page技术和采用Access数据库系统组件来构成考试的应用服务系统,开发了基于B/S模式多用户小区物业系统程序。...

    基于 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发

    1、基于 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发 2、采用MVC的框架模式,具有耦合性低、重用性高、生命周期成本低、可维护性高、有利软件工程化管理等优点 3、采用WebAPI,客户端完全摆脱了...

    .net快速开发平台整体解决方案

    极致管理软件开发平台基于Microsoft .Net开发技术和模型驱动的技术架构,是面向业务应用的管理软件开发平台。极致管理软件开发平台提供数据实体定义工具、界面设计工具、系统发布工具和运行时框架组件,帮助软件开发...

    .NET敏捷开发框架-RDIFramework.NET V5.1全新测试版本

    应用系统建立在此框架之上,采用构件式、可复用开发,节省开发成本,加快开发速度,在软件开发上更好的做到多快省。 适合低中高任意开发水平的开发者,可以开发OA、ERP、BPM、CRM、WMS、TMS、MIS、BI、电商平台后台、...

    rdiframework.net 敏捷开发框架 V5.1打包文档资料

    应用系统建立在此框架之上,采用构件式、可复用开发,节省开发成本,加快开发速度,在软件开发上更好的做到多快省。 适合低中高任意开发水平的开发者,可以开发OA、ERP、BPM、CRM、WMS、TMS、MIS、BI、电商平台后台、...

    基于.NET Framework 4.5的一款桌面版录音软件

    基于Visual Studio 2017 WPF开发的一款桌面版录音软件,框架.NET Framework 4.5

    ASP.NET WebAPI+mvc4.0+EasyUI快速开发框架+通用权限管理系统源码

    1、基于ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout的架构设计开发 2、采用MVC的框架模式,具有耦合性低、重用性高、生命周期成本低、可维护性高、有利软件工程化管理等优点 3、采用WebAPI,客户端完全摆脱了代理...

    Visual C#基于组件的开发

    本书内容提挈: ...本书讲述了基于组件的开发技术、实用的建议和真实的示例,可以帮助您在.NET环境下提高设计、调试和部署应用程序的效率,并能有效地消除错误,非常适合于使用Visual C#的中高级程序员阅读。

    基于ASP.NET的办公自动化系统的设计与实现

    论文首先介绍了面向对象技术的软件工程开发方法和ASP.NET组件对象模型。在此基础上,结合对湖南省卫生厅综合信息办公系统进行了需求分析,建立了对象、动态和功能模型。论文着重研究了如何采用ASP.NET技术进行系统...

    Visual C#基于组件的开发(源码)

    Visual C#基于组件的开发"的图书目录…… 第一部分 概论 第一章 开发过程 第二章 组件结构 第三章 组件设计 第四章 组件分类 第五章 调试 第六章 部署 第二部分 前端组件 第七章 WINDOWS窗体组件 第八章 ...

    基于ASP.NET在线考试系统设计

    Microsoft Access2000是微软公司开发的基于Windows平台的小型数据库管理系统,是Office 2000 的组件之一。它承袭了旧版本Access的各项优点,又新增或完善了数据访问页、个性化菜单、internet/intranet、编程、安全...

    基于Asp.net Core 3.1开发的权限管理系统.zip

    使用Asp.net Core WebApi,Jwt,Swagger2,AutoFac,SqlSugar,AutoMapper,DotLiquid,Nlog,Redis等组件及技术实现。 管理系统是一种通过计算机技术实现的用于组织、监控和控制各种活动的软件系统。这些系统通常...

    VB.NET数据库开发教程(pdg)

    应技术,内容涉及Visual Basic.NET的基本语法、SQL结构化查询语言以及基于.NET平台的数据库开发 技术。重点介绍了ADo.NET及其主要组件,包括连接对象、命令对象、数据阅读器、数据适配器、数 据集等,并通过实例...

Global site tag (gtag.js) - Google Analytics