从底层开始重新设计,.NET在XML集成、错误处理、组件加工以及可重用框架等方面取得了明显的进步。它在Web开发方面的承诺也非常清楚:开发速度更快、自定义代码更少而稳定性更强。一旦你决定将当前的应用程序移植到新的平台上,你必须确定你的应用程序是否为.NET做好了预备。本文将帮助你判定你的.NET性能。
恰当的语言
.NET框架依靠与多种语言兼容的通用语言的运行(CLR)。理论上,通过使用Java COM或Web服务,能够将基于Java的应用程序移植到.NET上而不需要用C#、C++或者Visual Basic(VB)重写代码。实际上,实现这样的异构应用程序通常是一件非常复杂的事情。而且在移植的过程中改变语言将影响时间。毫无疑问语言的移植将导致结构上的改变。
目前使用VB、C#、或者C++编码的应用程序逻辑,提供了向.NET移植的最简单的方式。然而,不是代码简单的重新编译,而是通过Java COM为VB、C#、或者C++改写为.NET框架库,或者采用其他混合语言的实现,提供了最可能成功的机会。
COM对象支持的应用层
假如你的系统是一个三层结构的系统,你的应用很可能依靠COM对象来封装应用程序逻辑。.NET框架支持COM对象。但是由于在.NET框架下COM对象的互操作性能下降,因此将COM对象移植到.NET框架治理的对象时需要慎重考虑。值得注重的是.Net早期绑定协议的性能提高将有助于在当前的ASP/COM实现上增加.NET/COM。
最起码,对于当前的COM实现你可以选择立即将其移植为.NET框架治理的对象,或者仍然作为COM层保留一段时间。
适当的使用存储过程
典型地,数据层的有力分割依靠于存储过程的封装数据处理逻辑。微软已经熟悉到使用存储过程是一种最好的编程习惯,并且可以依靠它来优化数据库性能。而且,存储过程提高了程序的可维护性,可以使SQL和“表(Table)”发生改变而不影响应用程序或者不改变代码的表示方法。
移植到.NET对于现存的存储过程不要求任何改变。对于执行和处理从存储过程中获得的数据,应用程序将需要移植为.NET框架的ADO.NET库方法或者需要使用COM对象。假如你已经使用COM对象来封装存储过程调用,那么从本质上来说,除了要在COM集成方面做一些工作外,不需要做任何其它的移植工作。
清楚地分离Html和ASP
在应用程序中一个常用的快捷方式是在ASP程序中使用嵌入的HTML来提供一个接口。由于嵌入的HTML数据流和提供的代码结构很难理解,这种编程习惯将不可避免地引起底层的维护问题。.NET强调要有好的编程习惯,不答应使用这些HTML提供的接口。而用自定义Web控件封装复杂的HTML,只给应用程序提供属性和事件。
分散而实用的ASP文件
在检查ASP和HTML代码时,需要检查嵌套的头文件(include files)。假如你的应用程序在很大程度上依靠于嵌套的头文件,则必须让程序员改变这种程序的依靠性。而且,假如头文件中的结构没有规范化,在将你的应用程序加入到全局的应用中时,会出现与全局的结构命名和功能重复的情况。
理想情况下,将所有实用类包含在不同的ASP文件中(或者比较好的是作为COM对象)。相似地,全局变量应该包含在一个单独的ASP文件中而不是分散在应用程序的各个部分。
慎用会话机制
除了服务控制之外,.NET为了提高Web应用的可扩展性还提供了新的性能。其中之一就是分布式会话模型,此模型使得一个Web farm中的多个应用服务器的会话数据可以使用。虽然分布式会话机制要求使用SQL服务器来存储会话状态,但是不需要对代码库进行专门的修改。应用程序的性能可能会受到影响,这取决于状态数据的数量和类型。
在不降低性能的情况下,为了利用这种性能,应该仔细评估当前会话系统的实现,尤其是需要维护的状态信息的数量、类型和结构。在移植的过程中,严格控制会话系统的内容。使用应用程序亲合(affinity)技术和失效切换(failover)模式以限制请求的状态信息。
结构化的错误处理设计
VB.NET所带来的新的结构化的改变是引入了Try、Catch错误处理机制,这种机制对于Java程序员来说是非常熟悉的。VB.NET仍然支持On Error及相关的声明,但是最好使用新的、结构化的错误处理机制。为了利用这种新的错误处理性能,必须具体了解当前的以及预备开发的应用程序的错误处理过程。
现在可以开始移植了
是否有一个好的应用代码库意味着成功的无缝移植和陷入不可预见的困境之间的差别。为了能够顺利地移植到.NET,检查你的系统并接受好的编程习惯。你将幸运地或者预知地发现表示层是用单一的语言,如javascript编码的,应用层是用VB、C#、或者C++编码的。理想的情况下,表示层几乎不需要自己的逻辑而且不需要嵌入SQL,就能够组织得很好;而应用层通过COM对象封装了编码的商业规则。在数据库这一级,理想的情况是应用程序使用COM调用存储过程。
.NET承诺了许多直接的改进,和微软的许多应用程序一样,新的平台只会变得更好。现在检查你的系统,为不可避免地调用.NET提供的新功能做好预备。即使你的系统现在不适合进行移植,.NET也将提供足够的有利条件来支持任何必要的修改。最起码,移植到新的平台上将为你提供修复应用程序中长期困扰你的问题的机会。所以,抓住时机,钻研代码,为.NET做好预备。