`
ihuashao
  • 浏览: 4711653 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

.NET三层经典架构PetShop3.0分析之表现层

阅读更多

前面从架构方面介绍了petshop怎样通过工厂模式可以轻松替换持久层实现。这次简单说一说petshop的表现层实现。

petshop的表现层使用了Web 页面(aspx)和用户控件(ascx)控件及自定义服务器控件等ASP.NET技术。

web页面(aspx)是用户和服务器交互的接口,也是用户除静态页面外唯一能够访问到的asp.net组件,其他像用户控件(ascx)和服务器控件只能在web页面(aspx)中使用,用户不能直接访问。用户控件类似于web页面,服务器控件与jsp的标签相似,可以在比较中进行学习。

.用户控件和服务器控件。

1.用户控件。

用户控件与web页面极为相似,只不过是以ascx后缀命名(确保用户控件不能作为独立 Web 窗体页来运行),并且不能包含 <HTML><BODY> <FORM> 元素,这些元素必须位于宿主页中。用户控件使您能够很容易地在多个 ASP.NET Web 应用程序之间划分和重复使用公共用户界面 (UI) 功能。asp.net页面中也可以使用include,也就是服务器端包含(SSI),不过用户控件编译后是.net 框架中的UserControl 类的实例,可以通过编程方式操作用户控件,通过访问由 ASP.NET 提供的对象模型支持,具有更大的灵活性。

用户控件使用小结:

  (1)用户控件使开发人员能够使用编写WEB窗体页的相同编程技巧轻松地定义自定义控件。 作为约定,用.ascx文件扩展名指示这样的控件。这样可以确保用户控件文件不能作为独立的WEB窗体页执行。

  (2)用户控件通过Register指令包括在另一WEB窗体页中,该指令指定TagPrefixTagNameSrc location

  (3)注册了用户控件后,可以像普通的服务器控件那样将用户控件标记放置在WEB窗体页中(包括runat="server"属性)。在包含WEB窗体页中将用户控件的公共字段、属性和方法提升为该控件的公共属性(标记属性)和方法。

  (4)用户控件参与每个请求的整个执行生存期,并且可以处理自己的事件,封装来自包含WEB窗体页的一些页逻辑。

  (5)用户控件不应包含任何窗体控件,而应依靠其包含WEB窗体页在必要时包括窗体控件。

  (6)可以使用System.WEB.UI.Page类的LoadControl方法以编程方式创建用户控件。用户控件的类型由ASP.NET运行库决定,遵循约定文件名_扩展名。

  (7)只有当为用户控件包括了Register指令时,用户控件的强类型才能由包含WEB窗体页使用(即使没有实际声明的用户控件标记)。

2.服务器控件。

asp.net服务器控件是一种类似于jsp taglib的编程模型。我们可以通过编程方式创建控件,然后在页面中使用。服务器控件可以提供极为强大的功能。msasp.net提供了三种服务器控件:

HTML 服务器控件 对服务器公开的 HTML 元素,可对其进行编程。HTML 服务器控件公开一个对象模型,该模型十分紧密地映射到相应控件所呈现的 HTML 元素。

Web 服务器控件 这些控件比 HTML 服务器控件具有更多内置功能。Web 服务器控件不只包括窗体类型的控件,例如按钮和文本框;而且还包括特殊用途的控件,例如日历。Web 服务器控件与 HTML 服务器控件相比更为抽象,因为其对象模型不一定反映 HTML 语法。

验证控件 包含逻辑以允许测试用户输入的控件。将一个验证控件附加到输入控件,测试用户对该输入控件输入的内容。验证控件可用于检查必填字段,对照字符的特定值或模式进行测试,验证某个值是否在限定范围之内以及其他目的。

.net2.0更是大大加强了web服务器控件。另外我们可以创建自定义的服务器控件(由于创建自定义控件相对复杂,并且内容较多,所以以后有时间介绍。),以提供通用控件没有提供的功能。

3.Web 用户控件和Web 自定义控件的比较:

Web 用户控件:

易于创建

为使用可视化设计工具的使用者提供有限的支持

每个应用程序中需要控件的一个单独副本

不能添加到 Visual Studio 中的工具箱

适用于静态布局

Web 自定义控件:

难于创建

为使用者提供完全的可视化设计工具支持

仅在全局程序集缓存中需要控件的单个副本

可以添加到 Visual Studio 中的工具箱

适用于动态布局

.petshop的表现层实现简介

1.App_Code目录

App_Code下包含了用户自定义的服务器组件,用于流程控制的业务逻辑类,和Utils类,另外还有页面Page和应用Application的配置类。

Default.aspx.cs 是一个System.Web.UI.Page,主要注册了load事件处理器,this.Load += new System.EventHandler(this.Page_Load);好像没有使用,不太清楚。

Global.asax.cs 是一个HttpApplication,主要重写了应用出错方法,protected void Application_Error(object sender, EventArgs e),将错误信息记入windows日至。同时通过重载GetVaryByCustomStritom属性。

controls目录下包含两个自定义服务器控件,SimplePagerViewStatePager,它们都是用于分页的。SimplePager继承自RepeaterViewStatePager又继承自SimplePager,所以他们都是模版可迭代控件。它们通过装饰模式为Repeater中的模版添加了分页按钮,并提供事件接口,用户可以注册onpageindexchanged事件处理器,该处理器主要用于绑定数据源。分页控件和我们emed3.0的分页标签不同,它绑定了所有的数据,但只显示特定也的数据。ViewStatePager通过viewstate维护分页状态,可以在一个页面中同时存在多个分页控件。

ProcessFlow目录下的类用于控制业务流程。AccountController.cs导航和用户帐户有关的事件。通过业务逻辑层(BLL)处理用户登录登出,获取用户信息,更新用户信息等逻辑。CartController.cs通过业务逻辑层(BLL)处理购物车相关信息的逻辑,比如创建,购买,添加购物,获取或存储订单地址信息等逻辑。

WebComponents下包含CleanString.cs Utils类,处理传入的字符串数据,保证不会超过maxLength长度,如果传入的是空(nulltrim后是“”),返回“”,其他换码,并将单引号去掉,替换为空格。

2.Controls目录

Controls目录下存放了用户控件。

addressui.ascx 封装了用户地址信息的一个table,用于收集和显示地址信息。

Banner.ascx 横幅,封装了页脚。

navbar.ascx 导航条,其中包含页眉,页眉下的登录,登出,帐户信息和查询栏还有帮助链接。最下面是一个导航菜单,分别导航到不同种类的动物。

preferences.ascx 封装了用户的喜好特性的信息页面组件。

其他控件作用相似,都是封装了某一个相对独立的UI界面的一部分。

3.Images目录

当然是包括了web页面用到的图片。

4.根目录

根目录下的其他文件是aspx页面和web.config配置文件和Styles.css样式文件。

Default.aspx是主页面(index),使用了页的顶部使用navbarnomenu控件和Banner控件。,中间是一个表,表左边是连接导航,中间是地图导航。点链接后会导航到Category.aspx

Category.aspx 用于显示某一类别的动物的信息。使用了SimplePager服务器控件。

其他还有SignIn.aspx用户登录,MyAccount.aspx用于查看和编辑个人账户信息,Search.aspx用于搜索,ShoppingCart.aspx显示购物车中的信息等。

.petshop的页面布局

petshop的布局比较简单,是通过组合用户控件实现的。对于Default.aspx页的顶部使用navbarnomenu控件,中间通过表table布局,页脚使用Banner控件。对于Category.aspx页顶部使用navbar控件,主体使用SimplePager自定义服务器控件。对于Search.asp和其他页面与Category.aspx几乎一样。

.petshop的页面导航

在主页面上可以导航到各个类别,导航到各个类别或者某类中的具体动物时,还可以通过navbar,随时导航到各个类别。

所有存在搜索的页面都是通过navbar.ascx用户控件中的<form id="search" method="get" action="Search.aspx">导航的。

主页面default.aspx通过 href="Category.aspx?categoryId=BIRDS"连接将用户导航到具体的物种列表。

navbar.ascx中,通过<a href="SignOut.aspx" >,<a href="EditAccount.aspx">,<a href="ShoppingCart.aspx">,<a href="SignIn.aspx">分别导航到登出,编辑个人帐户信息,购物

车,和登录页面。

Category.aspx<form id="form" method="post" runat="server">,请求到该页面时SimplePager自定义控件会调用Category.aspx.csprotected void PageChanged(object sender, DataGridPageChangedEventArgs e)方法,通过Request["categoryId"]获取该类动物的列表。并构造单独动物的链接--<A href='Items.aspx?productId=<%# DataBinder.Eval(Container.DataItem, "Id") %>'>,通过动物id,获取动物的详细信息。

对于SignIn.aspx,如果用户没有账号,可以通过<a href="CreateAccount.aspx">导航到<a href="CreateAccount.aspx">。用户点击登录按钮会触发SignIn.aspx.csSubmitClicked()事件处理器方法,该方法通过ProcessFlow.AccountController 处理登录请求,如果登录成功导航到合适的页面,HttpContext.Current.Response.Redirect(URL_ACCOUNTSIGNIN, true)--主页面或HttpContext.Current.Response.Redirect(FormsAuthentication.GetRedirectUrl(userId, false), true)--其他页面。

其他页面的原理差不多,也就是一部分导航是直接通过<a>标签写在页面中,另一部分是通过ProcessFlow中的导航逻辑类进行按照逻辑和操作状态导航(利用HttpContext.Current.Response.Redirect)。

.petshop的应用和会话状态

petshop使用基于Form的认证模式:

<authentication mode="Forms">

<forms name="PetShopAuth" loginUrl="SignIn.aspx" protection="None" timeout="60"/>

</authentication>

其他的location定义了拒绝匿名访问的页面,点击这些页面时,用户如果没有登录系统会首先转到登录页面。

用户信息和用户的购物信息基本上是通过ProcessFlow中的AccountController.csCartController.cs实现的。

用户登录时会调用AccountController.cspublic bool ProcessLogin(string userId, string password)方法,登录成功后会通过HttpContext.Current.Session[ACCOUNT_KEY] = myAccountInfosession中储存用户帐号信息。创建新帐号成功后同样会在session中储存用户帐号信息。同理,更新帐户信息会更新session,退出会清除session

对于购物信息,也是存在于session中。存储购物车后会将购物车信息储存在session中。存储信用卡时会在session中保存信用卡信息,等等,不一一介绍了。

分享到:
评论

相关推荐

    petshop3.0的资料

    4. **三层架构**:PetShop 3.0采用了业务逻辑层(Business Logic Layer, BLL)、数据访问层(Data Access Layer, DAL)和表示层(Presentation Layer)的三层架构设计,这种设计模式有利于代码的重用和模块化,是Web...

    Winform的petshop3.0的开发模式

    1. **分层架构**:PetShop3.0采用了常见的三层架构,包括表现层(Presentation Layer)、业务逻辑层(Business Logic Layer, BLL)和数据访问层(Data Access Layer, DAL)。这种架构有助于代码的组织和维护,提高了...

    微软PetShop合集(2.0,3.0,4.0,5.0)

    它使用了三层架构,即表示层、业务逻辑层和数据访问层,为开发者提供了理解Web应用程序架构的良好起点。 2. PetShop 3.0:随着.NET Framework 2.0的发布,PetShop 3.0引入了ASP.NET 2.0的新特性,如母版页、主题、...

    Asp.net三层架构实例 v1.0

    本系统借鉴了MS PetShop3.0三层架构体系思想精髓,能让学者快速理解DOTNET三层架构开发思想,并能高效地应用于实际系统开发中。 安装、使用相关说明: 1.在sql server 2000新建一个ThreeLayer数据库,到应用程序...

    PetShop3.0源码和设计模式与体系结构

    学习.NET三层架构入门读物 培养标准设计思想 Microsoft .NET Pet Shop 3.0 是 Microsoft 基准应用程序系列中最新的一个。 该基准用于对这个 .NET Web 应用程序本身与 Middleware 公司开发的等价 J2EE 应用程序(已经...

    .Net petshop 4.0+文档

    《.Net PetShop 4.0:微软分层架构的典范》 .Net PetShop 4.0 是微软推出的一个开源示例项目,旨在演示如何利用 .NET Framework 构建一个完整的、分层的企业级应用程序。这个项目对于初学者,尤其是那些在IT行业中...

    PetShop全版本(2.0-5.0)

    此外,还引入了ADO.NET进行数据库操作,展示了如何构建三层架构的应用程序。 2. PetShop 3.0: 随着ASP.NET 2.0的发布,PetShop 3.0引入了更多的改进和新特性。这一版加强了数据访问层,使用了Entity Framework的...

    C#三层结构图个人网络收集

    7. **经典三层结构**:经典的三层架构通常包括表示层(UI)、业务逻辑层( BLL )和数据访问层(DAL)。表示层负责用户交互,业务逻辑层处理业务规则,数据访问层则负责与数据库的交互。 8. **微软Duwamish7**:...

    petshop 架构 登录界面

    这种架构通常包括三个主要部分:表现层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。表现层负责与用户交互,处理用户请求并显示结果。业务逻辑层处理应用程序的...

    PetShop的系统架构设计

    在PetShop的系统架构中,主要分为三层:数据访问层、业务逻辑层和表示层。每层都有特定的职责和功能: 1. 数据访问层(DAL,Data Access Layer):这一层负责与数据库的交互,包括基本的CRUD(创建、读取、更新、...

    Petshop4.0系统架构设计

    Petshop4.0采用了典型的三层架构模式:数据访问层、业务逻辑层(或称领域层)以及表示层。每一层都有其特定的功能和职责范围,这种分层架构能够帮助开发者更好地组织代码,确保各部分之间的松散耦合,从而提高系统的...

    PetShop 架构

    在【系统架构设计】方面,PetShop采用的是典型的"三层"架构,这包括数据访问层(DAL)、业务逻辑层(BLL,也称为领域层)和表示层。这种分层设计有几个关键优点: 1. **结构清晰**:将系统功能划分为不同的层,使得...

    PetShop 4.0详细分析.doc

    PetShop是一个经典的示例应用,由微软使用VS.NET开发工具构建,从2.0逐步演进到4.0。PetShop 4.0不仅继承了3.0的优点,还融合了VS.NET 2.0的新特性,为开发者提供了学习和参考的企业级系统开发实例。 PetShop作为一...

    petshop4.0详解

    PetShop的演变历程显示了架构的改进,如PetShop 2.0的非典型三层结构,以及PetShop 3.0和4.0引入了更清晰的数据访问层和优化性能的策略,如缓存和异步处理。 在PetShop 4.0中,`DAL Interface`抽象了数据访问逻辑,...

    Petshop图解

    在 PetShop 的架构中,主要分为三层:数据访问层、业务逻辑层和表示层。 **数据访问层**(DAL,Data Access Layer)是系统的基础,负责与数据库的交互。它实现了对数据表的基本 CRUD 操作(Create、Read、Update、...

    PetShop_3.0_&amp;_4.0_&amp;_5.0 源码合集及详解

    PetShop是一个范例,微软用它来展示.Net企业系统开发的能力。 在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或...

    Petshop4.doc

    Petshop4的架构设计细致周全,涵盖了表现层、模型层、业务逻辑层和数据访问层等多个层面,形成了一个完整而复杂的项目体系。其中,各个项目模块紧密相连,共同构建出一个高效稳定的企业级应用。 1. **WEB**:表示层...

    Microsoft .NET Pet Shop 5.0 最新源码+详解

    Microsoft .NET Pet Shop 5.0 是一个经典的示例应用,展示了如何利用.NET Framework 3.5的强大功能来构建现代Web应用程序。这个版本相较于之前的版本有了显著的提升,尤其是在技术和功能上,引入了诸如Language ...

    Microsoft .NET Pet Shop 3.x_ .NET Pet Shop 的设计模式与体系结构.docx

    2.0版本的体系结构采用了传统的三层架构,包括表示层(Web UI)、业务逻辑层(BLL)和数据访问层(DAL)。每个层都负责特定的任务,如UI处理用户交互,BLL执行业务规则,而DAL处理数据操作。 6. **.NET Pet Shop ...

    ASP.NET课件001

    学生可以访问多个官方和第三方网站获取相关资料和示例代码,如Microsoft的官方网站(gotdotnet.com、msdn.microsoft.com)、ASP.NET官方社区(asp.net)以及各种示例项目,例如Duwamish 7.0(网上图书销售)、Fitch ...

Global site tag (gtag.js) - Google Analytics