在前面的文章中,我们已经就.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用户控件
接下来的文章我们将就系统配置和安全管理作进一步的说明。