在前面的文章中,我们已经就.NET Petshop的数据层和中间的业务逻辑层作了说明,接下来的文章中,我们将就数据展示层作探究。与前面的两层有着很大的差别的是,.NET Petshop的展示层用了很多Microsoft最新的web Forms技术即Asp.NET。因此,在解说展示层之前,我想就Asp.NET在.NET Petshop的开发中使用到的非常重要的特性做一些说明,以示区别:
(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说明了设计模式下和运行时的用户控件。
图1:设计模式和运行时的ctlCart用户控件
接下来的文章我们将就系统配置和安全管理作进一步的说明。