在前面的文章中,我们已经就.NET Petshop的数据层和中间的业务逻辑层作了说明,接下来的文章中,我们将就数据展示层作探究。与前面的两层有着很大的差别的是,.NET Petshop的展示层用了很多Microsoft最新的web Forms技术即Asp.NET。因此,在解说展示层之前,我想就Asp.NET在.NET Petshop的开发中使用到的非常重要的特性做一些说明,以示区别:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
(1) Asp.NET代码不再是解释型代码,可以经由JIT编译器编译后运行,并且引入了很好的页面缓冲机制。
(2) ASP.Net的配置模型引入了基于XML文件的“零安装”配置模型。零安装的含义是只需将配置文件Web.config,应用程序拷贝到系统指定的目录下即可,需要更改时直接在文件里更改并保存。
(3) 安全管理 ASP.Net提供了比传统ASP更强大可靠的安全管理。Asp.NET提供了三种验证方式以及两种类型的授权服务。
(4) 支持代码和页面内容的分离。回想以前编写Asp程序的时候的问题:代码逻辑混乱,难于管理。
(5) 提供了更好的状态管理,包括会话状态的管理和视图状态的管理。
(6) 大量的ASP.NET服务器端控件和对用户控件的开发的支持。
.NET Petshop充分的使用了服务器控件技术和会话状态管理。展示层的交互界面均采用aspx页面,后端有分离的逻辑代码。.NET Petshop共有19个aspx页面和代码逻辑。在这里一一里列出,并说明设置参数和其作用。
ASP.NET Web页面 |
EnableSessionState |
EnableViewState |
备注说明 |
Cart.aspx |
true |
true |
购物清单 |
Category.aspx |
True |
false |
产品分类的列表 |
CheckOut.aspx |
Readonly |
false |
订单确认 |
CreateNewAccount.aspx |
False |
true |
创建新帐号 |
Default.aspx |
False |
false |
系统首页面 |
EditAccount.aspx |
False |
true |
账号编辑 |
Error.aspx |
False |
false |
错误处理 |
Help.aspx |
False |
false |
帮助 |
OrderAddressConfirm.aspx |
readonly |
false |
订单地址确认 |
OrderBilling.aspx |
True |
true |
订单信息 |
OrderProcess.aspx |
readonly |
false |
下订单 |
OrderShipping.aspx |
True |
true |
订单地址和姓名 |
Product.aspx |
False |
false |
产品列表 |
ProductDetails.aspx |
false |
false |
产品详细信息 |
Search.aspx |
false |
false |
搜索 |
SignIn.aspx |
false |
false |
帐号登陆 |
SignOut.aspx |
true |
false |
帐号退出 |
ValidateAccount.aspx |
false |
false |
帐号创建确认 |
VerifySignIn.aspx |
false |
false |
账号登陆确认 |
.NET Petshop使用了很多用户控件,这些控件位于web/Inc目录下面。表格2对用户控件作出说明:
User Controls |
EnableViewState |
备注说明 |
ControlAddress |
true |
详细地址列表 |
ControlBanner |
false |
页面底部的banner |
ControlCart |
true |
购物清单 |
ControlFavList |
false |
个人Favorites列表 |
ControlHeader |
false |
页面顶部的菜单和链接 |
ControlStaticAddress |
false |
不能编辑的地址信息 |
下面列出一段代码,说明这些参数的设置和用户控件的引用:
/* 摘自Cart.aspx */
<%@ Register TagPrefix="PetShop" TagName="Cart" Src="Inc/ControlCart.ascx" %>
<%@ Register TagPrefix="PetShop" TagName="Header" Src="Inc/ControlHeader.ascx" %>
<%@ Page language="c#" Codebehind="CheckOut.aspx.cs" AutoEventWireup="false" Inherits="PetShop.Web.CheckOut" EnableSessionState="readonly" enableViewState="False"%>
开始的两个Registe指令用于引用ControlCart和ControlHeader的用户控件,Page指令定义 ASP.NET 页分析器和编译器使用的页特定的属性。
在控件的排放位置使用下面的代码既可以显示该控件了:
<PetShop:Cart id="ctlCart" runat="server" allowedit="false" />
在上面的代码中allowedit一项是向实例化的ctlCart传递参数。我个人认为用户控件是一个很好的东西,可以简化web页面的开发模型又可以达到代码复用的目的,而且其开发非常简单,与aspx的开发基本是一样的。图1说明了设计模式下和运行时的用户控件。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><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:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype>
图1:设计模式和运行时的ctlCart用户控件
接下来的文章我们将就系统配置和安全管理作进一步的说明。