开发社区包括.NET Framework的内容,其中最有特色的是ASP.NET的Web开发。然而,这里也包含大量的有关legacy ASP代码及其开发人员的讨论。
很多ASP开发人员并非真正经过培训的开发者,他们往往只是HTML代码编写者,他们处理的ASP模型很不合理。这些开发人员通常只知道将他们的ASP常规思维应用到ASP.NET环境中,而这个过程他们却不知做出相应的选择。
以往的缺点
我特别喜欢ASP.NET所具有的稳定性,尤其是当我在ASP开发过程处于迷惑不解的时候。我的迷惑不解来自ASP的本质,即所有操作都集中在同一个bucket,也就是说,一个ASP页既包含源代码,也包含HTML。在一个Web页中放置java script也是类似的,这通常称为内联(inline),但开发人员通常将其称为意大利面程序码(spaghetti code).
在一个开发项目中,计划和开发过程的结合没有很好地与项目任务匹配,而出现这种情况通常为Web用户界面设计者和程序开发者。允许Web开发人员查看ASP代码往往使得程序开发者感到不安,并且使Web开发人员感到迷乱。一个比较可行的方法是将设计过程分离化。
分离并改进
当提及.NET的优点时,微软都会吹嘘面向对象程序开发(OOP),而OOP特点在ASP.NET中更为显著。它通过一个背后代码文件(codebehind file)的方式允许源代码从Web markup分离开来。Web markup存储在一个.aspx文件中,并且源代码(VB.NET,C#等)存放在一个附带的代码文件中。Codebehind文件名取决于使用的开发语言,但如果我们利用VB.NET来建立一个名为TestPage的ASP.NET页,以下的文件名是合法的:
TestPage.aspx:Web markup,java script等。
TestPage.aspx.vb:包含VB.NET源代码的文件。
如果选用的是C#.NET语言,Codebehind文件将被称为TestPage.aspx.cs。Codebehind文件包含的类是来源于位于System.UI.Web空间名称的Page类。Codebehind文件与@Page标志的aspx文件及其附带文件Inherits属性进行链接。Inherits属性指向Codebehind文件和类的名称,而这一指向不需要文件扩展。
<%@ Page language="c#" Inherits="TestPage" %>
语言的特性表示了页面的语言──并不是Codebehind。页面可以通过内联(inline)代码使用一种语言和在Codebehind文件中使用的另一种语言。Inherits属性指定了页面的基本类(Codebehind类)。
在缺省情况下,Codebehind文件使用Page类作为其基本类,但也可以使用普通的类。这就提供了建立程序的主控页面(master pages)的可能性。
以Visual Studio .NET方式处理
使用Codebehind文件是Visual Studio .NET开发环境中的默认特性。例如,在ASP.NET页中建立的@Page标志具有以下的语法:
<%@ Page language="c#" Codebehind="TestPage.aspx.cs"
AutoEventWireup="false" Inherits="TestPage" %>
以上代码包含两个额外的特性:
Codebehind属性指向页面的codebehind文件。这一属性只适用于Visual Studio .NET。
AutoEventWireup属性表示标准事件是否自动地连接到代码中的任意句柄。Visual Studio .NET在处理事件建立时将这一属性设置为false。
Visual Studio .NET将codebehind文件编译成为一个可执行文件,这一可执行文件可使用于Web程序的bin目录中。这就加快了页面的载入,因为当网页首次被请求时无需再被编译。另一方面,一旦第一个客户端请示时,内联(inline)代码即被编译。
做出你自己的选择
OOP语法是分离源代码和用户界面部分的支撑者,但这也并非意味着它能适用于所有情况。分离方法依赖于不同因素(包括开发时间和专业技术),但拥有所有可能的知识可以更容易地做出决定。自从引入ASP.NET的介绍之后,关于内联(inline)和背后代码(codebehind)的话题一直处于激烈的讨论中。