.NET Petshop详解(四):petshop三层结构之PresentationTier
在前面的文章中,我们已经就.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用户控件
接下来的文章我们将就系统配置和安全管理作进一步的说明。