UML软件工程组织

移植到.NET
By Brian Noyes 选择自 发赛特技术网

当一种新技术出现的时候,对于公司和开发者来说都是令人激动且有紧迫感的时刻。开发者们想学习新的东西——有意思的东西,能保证使他们的生活更加轻松的东西。他们想处于技术工作的最前沿。管理人员和市场人员也急于了解新技术,以便在市场宣传中做得更好,并且使公司更具有竞争力,通过对新技术的使用,使公司获得更多的回报。没有人希望公司仍然用旧的、过时的东西。

对于基于Windows平台和其他平台的开发者来说,.NET 正在成为一种令人激动的,具有革命性的——或者最起码说有发展性的新技术。无论您是Web开发者,组件开发者,数据开发者,VB GUI 开发者,或者任何基于Windows平台的开发者,.NET都承诺使您更好地完成您的工作。

 

				图1.
图1. 移植基于组件的框架结构程序到.NET
但问题是怎么从当前的状况转向.NET。想说服管理者和用户接受新技术是困难的,尤其是在正式版本发布之前。“怎样在你的项目中调整自己来转向.NET”,这是一个经常被问到的问题,答案是“看情况....”我会给你一些把你的项目转向.NET之前所需要考虑的事项,以及不同的.NET技术所适应的最好的领域。对这些了解之后,你就有了充足的理由说服你的客户并使其同意转向.NET开发。

尝试基于组件的框架结构
对于大多数你正在开发的系统而言,你不必放弃你已开发好的的软件,而一步转向.NET。通过.NET的互用性,你可用.NET所提供的语言,工具,技术进行开发,开发出的新模块可以和以前的模块很好的协同工作。

互用性存在于.NET的许多层面,他们包括针对C++, COM/COM+ 的管理扩展,管理提供者及平台调用(P/Invoke)。所有这些互用性可以根据你要移植的代码的类型或者功能, 轻松地使你把你的框架转换成.NET 框架,而不需要重写所有代码。

 
商业应用
节约成本将会增加收入
当你分析将要开发的工程来决定他们那个适合用.NET来开发从而获得更高的效益时,你会看一看公司内部项目和他们的开发成本....
从最高的层面上来讲,为了顺利地转向.NET,你现在最应该做的是在开发过程中尽量使代码和功能组件化。因为基于组件的框架结构允许并行开发,提高可维护性、可用性且利于产品的发布。.NET的核心是面向组件的,Juval Lowy 的文章 -“用.NET设计一个新的课程“,在.NET的组件架构发面有一些不错的见解,我这里就不详细介绍了。

如果你现在有幸用预发布的.NET版本进行开发的话,那么做好转变的准备吧。.NET架构和语言可使面向组件的开发成为一件轻松的事。丰富的架构库可使你的代码更加高效。用多语言的软件公司也会受益于.NET,因为所有的.NET开发者都用同一个开发库(所用语法会根据语言的不同会有很小的差别),所以他们可以共享在开发过程中所获得的经验。相反,在当前的多语言开发中,如VB开发者,脚本开发者,C++开发者用的是不同的库和技术。

如果现在不能用.NET开发,那么尽量把你要实现的功能做成COM或者COM+组件。如果你这样做了,你就可以利用.NET的COM互用性在.NET中直接使用他们。使你的代码结构尽量接近COM组件的结构,也可以使你在日后方便地把他们转换成.NET组件,如果你愿意的话(参照图1)。

.NET的另外一个重要特性是:它支持跨语言的开发。你现在可以从Visual Studio.NET 所带的语言——C#, C++, VB 和JScript, 或者第三方为.NET所开发的语言中选择适合你的。但是,即使你不想学习一种全新的语言,如C#,你仍然需要一些在.NET中写代码的技巧。

C++开发者可以通过C++(MC++) 管理扩展编写.NET代码。但不幸的是,为了使用MC++ ,你必须学习新的语言扩展、关键字、属性,以及哪些C++语法在.NET中是合法的,那就意味着你无论如何要学习一种新的语言。而且因为你的代码中有了那些额外的东西,所以很难被读懂。

尽管我有十多年的C++编程经验,我仍感到在开发.NET应用程序的过程中C#是一种高效的,简单的语言。相对于C#,MC++ 提供更强大的功能,而且在把你的程序分割成本地代码和受管代码时,更加简单、灵活。在一些对程序运行效率要求很严格的场合,你可以用C++写本地代码应用程序。如果你想用C++写本地应用程序及COM组件,那么在.NET的开发中你仍需要使用MC++。ALT Server是一种通过使用ALT来创建高性能Web Services的新技术,它是基于C++的,并附带有一些ALT库。

 

				图2.
图2. 用SOAP 和Web Services提供跨平台的互用性
对VB的开发者来说,VB.NET已真正、全面地支持面向对象的能力,它包括等待已久的继承和多态。但要付出的代价是:VB.NET 使用和以前版本的VB不同的代码结构。VB IDE向用户提供被以前VB所隐藏起来的细节,比如说:事件分派、类型转换及错误处理。VB.NET的IDE仍为你做许多事情,但你会了解这些,而不像以前那样被隐藏起来,对于初学者来说,可能感到代码更难读了,但对于有经验的VB程序员来说,这是一个很大的进步,尤其在代码调试中,比如说调试COM程序。

JScript 也被改进成为一种全面支持.NET的语言,但它可能主要被用在基于.NET的Web应用程序中,而不是单独的应用程序。

在.NET中C#是一种崭新的语言,它提供像C++, Java,和Smalltalk等以前的面向对象语言所提供的特性及功能,实际上C#是一种把他们揉和在一起,类似C++语法的新语言。所以很好解释为什么许多C++甚至VB开发者选择C#作为他们的.NET开发首选语言。C#简单易用。微软的大部分的.NET构架类库用C#写,从这一点也可以看出C#的重要性。

你必须首先为你的.NET开发选择一种语言,然后培训员工使用这种语言及和.NET相关的一些新特性,这一步是很关键的。在允许开发者选择他们喜欢的语言方面,你有比以前更大的灵活性。不过你需要有配置管理这方面的考虑,很多公司会在用好几种语言写成的代码面前不知所措。但是你会发现新的机遇,它能在你的不同项目中共享代码。比如,对一个主要由面向组件的C++组成的现有项目来说,有许多工作要做,如果你想让你的VB开发人员用现有的技术来做一些辅助工作的话,那是比较困难的,但是如果用.NET技术,那就很容易了。

转向Web
人们对.NET的关注主要集中在它在Web 开发的能力上,由于ASP.NET中的新特性的加入及.NET对Web Services 和SOAP (Simple Object Access Protocol)的集成,使得开发人员开发出全新的应用程序及服务来适应当前网络互联不断增长的时代。不管你现在的公司是否是一个网络开发公司,Web Services 为你提供了跨平台协同工作的新途径,这一点你不应忽视。尽管你可以不用.NET来开发 Web Services而用别的东西如:Micorsoft SOAP Toolkit 获Apache SOAP, 但是用.NET尤其是用VS.NET来开发更快捷方便。

如果现在你的公司用ASP或JSP开发网站或网络应用程序,那你真应该考虑尽早使用ASP.NET。ASP的缺点是不容易去写易理解、可用性好的代码,因为它的代码中夹杂着脚本和HTML,那很难被读懂,至于重用也只能通过剪贴来实现。由于ASP自身的结构, 很难用面向对象的方法编程。虽然可以通过好的编程习惯,就是使用服务端引用或FrontPage 模板,靠封装代码来提高可用性,并且避免重复代码带来的混乱。但即使这样,项目还是难于管理、维护。

ASP.NET为网页编程提供了一种全新的模型,它更加简捷,更加面向对象、更易维护,可用性更强。Jeff Prosise 写了一篇很不错的关于ASP.NET各种特性的概述性的文章(参阅Resources )。请注意,ASP.NET是通过使用服务端脚本模型来使你更好地把你的代码从HTML中分离出来。在这个模型中,.NET runtime 编译并执行代码,这使你可以编写面向对象的,高效的HTML产品。与ASP不同,ASP.NET允许你把页面上的元素或Form当成对象,你可以简单地使用与之相关的行为、属性,不像ASP只是一些零散的标签。

通过使用.NET针对ASP.NET的构架类库,你可以只在服务器端装一套代码,它便具有自动为不同的浏览提供其所支持的HTML用户界面的能力。你不必为了支持以前的浏览器而缩减你的网站所提供的功能,或者写几套代码来适应不同的浏览器;.NET构架类库会为你做所有这些。你也可以在你的代码中使用.NET构架类库提供的所有功能,这样相对于ASP你可以在更短的时间内开发出界面更加专业,功能更加强大的Web应用程序。

最后要提及的是:已经存在的ASP页面可以和新的ASP.NET页面(ASPX)同时存在而不会相互受影响,或者通过简单的修改将ASP转换成ASP.NET页面。那意味着,如果你想在你的Web服务器上运行ASP.NET的话,那么你现在就可以用.NET写新的页面了。微软警告,在未正式发布的.NET上开发的产品,不能保证其稳定性和安全性。但是根据你网站的内容和需求,你也许值得冒这个风险现在就开始用它, 你能够获得使用这个新模型所带来的功能及高产出性。

提供跨平台互用性
许多公司努力寻找时间、工作量、复杂程度三者之间的平衡以获得跨平台独立性。为了获得这一特性,你将面临茫然、困难以及为了写跨平台的代码所带来的性能上的问题,而且在为一个平台写代码时,还要使用一些别的技术来实现系统间的互用性。

为特定的平台写代码时,诸如Windows,你通常会用一些功能丰富的开发工具来加速产品的开发及降低开发费用。你也可以从用户那里获得直觉性的、丰富的应用程序开发经验。但是那些没有涉及到跨平台所涉及的东西。如果你要写跨平台的代码, 你必须混合用Java、CORBA或类似的技术,这些在上面提及的开发工具中集成的很少,而且有些开发工具自身都有跨平台的问题。

现在SOAP和Web Services 已经被广泛应用成为标准,当你使用为特定平台设计的开发软件开发时,它们使你的软件具有跨平台的能力。你可以在.NET上为Windows 平台上的系统开发服务或客户端应用程序,同时这些服务或程序也可以和为其它系统写的程序,或用不同的框架和语言写的程序通信。SOAP是允许两个不同世界相接触的粘合剂。

举例来说,假设你有一个由许多COM组件和服务组成的复杂应用程序,它开发并运行在Windows平台上。现在你有一个新的需求,要使你的程序同一个不是基于组件的系统(Sun平台)协同工作。你可以选择重新开发两个系统,通过使用跨平台的语言如C++或Java 和CORAB服务来提供一个分布式对象解决方案。这样的解决方案即满足了老系统的需求,而且在两个平台之间架起了沟通的桥梁。

但是如果你选择这种方法,那么你需要很大的预算,很长的时间,以及许多能理解这些复杂技术的高级开发人员。顺便说一下,因为大多数的Object Request Broker(ORB)提供者缺乏对互用性及标准的认识,这使你的开发难度进一步加大。

Web Services 和SOAP提供了一种新的更加简单的跨平台解决方案。通过简单的连接一个SOAP客户机/服务器框架作为通信渠道,且连接一个SOAP提供者到现有系统,这样,在不需要重新改写所有功能的情况下,获得互用性。随着广泛的工业支持,及更多的标准进入SOAP规范,你可以很简单地从运行在任何系统上的Java客户端程序调用.NET Web Service,相反,你也可以在任何.NET应用程序中调用别的(系统)上的Web Service,而不需要知道它们是怎么开发完成的。这种方法对于调用.NET Web Service 或用.NET应用程序都适用。而且用.NET开发Web Service很方便,通过.NET中COM的互用性,你也可以用.NET生成Web Service,它是系统间通信的桥梁(参照图2)。

在过去你必须自己写代码或调用类库来提供服务,现在Web Services 开始了一种在Internet上提供服务的新的编程模型,过去通过类库或网页提供特定功能的公司,现在可以将那些功能集成为应用程序(服务),可以被其他公司调用。

假如Web Service能够发挥最大的性能,它必须依靠NET的ATL Server技术。基于Active Template Library (ATL)的Web Service使用了Internet Server API (ISAPI)过滤器。ISAPI作为前端,把服务调用分配给创建的ATL对象。这样,你就能够提供你想要的服务。

对于那些想要使用.NET的新功能和新特性的公司来说,他们所面对的最困难的问题是:说出他们打算何时开始使用.NET和到底使用.NET的哪些元素。如果你的项目决定使用.NET,那就开始用beta版开发,当正式版出来后,你可以打包程序作为一个正式的产品。如果还不能确认是否使用.NET, 你先可以开始看看你的系统和存在的程序,研究如何使用.NET的性能和诸如COM等其他技术。这样你能够找到一条很容易移植到.NET的途径,而不需要扔掉所有已经做好的程序,也不需要冒很大的风险去使用最新的,但是对极为重要的产品没有多大改善的技术。


关于作者:
Brian Noyes作为一个软件工程管理者,工作在Digital Access Corp(www.digitalaccess.com)。他是一个拥有10年多软件和系统工程经验的MCSD开发者。他是技术主编,并常为Visual Studio Magazine 和 .NET Magazine投稿。你可以通过bnoyes@domeworks.com联系他。

 

版权所有:UML软件工程组织