PetShop3.x学习笔记12-Web学习笔记

来源:互联网 发布:黑客收徒网站源码 编辑:程序博客网 时间:2024/04/27 21:30

一、 Web主要功能:

1、              页面展现

2、              数据缓存——页面输出缓存、数据缓存、对象缓存

 

二、 实现细节:

1、              网站页面文件功能说明

 

文件名

.aspx文件

.cs文件

default

1、使用了两个用户控件,Banner(页面底端)和NavBarNoMenu(页面顶端)

没有特殊作用

Banner

在页面底端,用于显示用户最感兴趣的宠物的广告图片

使用到了AccountController.cs文件

AccountController

1、用于实现一组对用户账户进行操作的功能:如创建、更新账户,用户登录、注销,返回账号对象,取回当前用户最喜爱的宠物类别等

2、跟Web层打交道的类(从Web层引用的命名空间可以看出),只有BLLModel中的类。在实例化的时候一定要注意,实例化的是哪个层的类。如BLL层叫Account,而Model层叫AccountInfo

Category

1、注意:使用另一个命名空间(即使是同一个Assembly)中的类的方法!例:

<%@ Register TagPrefix="controls" Namespace="PetShop.Web.Controls" Assembly="PetShop.Web" %>

2、开始涉及到翻页程序的问题!将SimplePagerDataGrid对照着看,可以知道在控件中使用模板列的方式,以及控件中的实现方式!

1、最主要的就是一个PageChanged()方法,响应了由SimplePager定义的PageIndexChanged事件

2、处理了该从哪里取数据,即该显示什么数据的问题

3、若数据已被显示过,则直接从缓存中读取数据,并将SimplePager对象绑定数据源;若数据没有被显示过,则实例化BLL层的对象,从数据库读取数据(IList引用),并缓存起来,然后将SimplePager对象绑定数据源

4、绑定数据源的事件又引发了SimplePager对象的OnDataBinding()事件处理程序

SimplePager

1、为了使SimplePager类使用继承于IList接口的数据源,所以重写了RepeaterDataSource属性

2、对外公布了PageIndexChanged事件,可供客户事件处理程序使用

3、主要用于计算(当前)页码,以及根据总页码及当前页码,决定是否显示向前向后的(图片)按钮

4、不规定数据源,使这个翻页程序可在很多场合重用

5SimplePager控件似乎不应该在每次翻页的时候都检查数据源啊?!

NavBar.ascx

1、导航条。包括主图片、分情况显示登录或注销输入框、Category项目等

2、由于是演示程序,这里的Category被写死在页面当中,当类别可以动态修改的时候不能使用,参考价值不大

1、主要用于根据用户身份认证情况显示登录选项和注销选项

Items

1、显示Items列表和显示Products列表(Category文件)实现方式是类似的

2、也是在页面中使用了SimplePager控件,用于根据当前给定的数据源进行数据绑定,并翻页显示

1、与Category.aspx.cs完成的功能相同

ItemDetails

1、显示某个Item的具体细节情况,如单价、库存数量等

2、如果选中,可点击“添加”按钮,将该Item添加到购物车(在购物车页面中调整要购买该Item的数量)

1、读取用户请求的ItemId

2、实例化BLL层的对象,根据ItemId得到一个ItemInfo实例

3、将此ItemInfo实例的各个属性分别赋值给页面上的各Label,并显示

CleanString.cs

1、用于过滤用户输入的字符,如去掉空格,替换掉怪字符等

2、加一些更特殊的过滤选项,可以使用在自己的项目中

ShoppingCart

1、非登录用户也可以向购物车中添加物品,但当下订单的时候会出现登录框

2、主要用于显示当前购物车中的物品条目及数量

1、用于处理用户点击“Update”或“Remove”时,重新计算某个Item的费用、总共的费用或移除某个Item

2、其他响应购物车事件的操作

ViewStatePager.cs

 

1、主要用于处理购物车中物品显示时的翻页问题

2、继承于SimplePager类,大部分的方法都由重写SimplePager类的同名方法得到

3、比SimplePager类多定义了两个方法:PreviousClicked()MoreClicked()

CartController.cs

1、主要功能:对购物车的存取操作

2、创建或从Session中取出现有的购物车;将修改后的购物车保存回Session

3、购买购物车中现有的物品——调用BLL层,插入一个新的订单(使用了BLL层的OrderInsert.cs类,这个类是应用“分布式事务”进行处理的典型案例)

4、向Session中保存或取出用户信用卡信息和邮递地址信息等

CreateAccount

1、用于显示用户注册时的界面

2、其中的My AddressMy Preference都采用了独立的User Control

1、对用户输入的信息,都要使用CleanString类进行过滤

2、使用了Model中的AccountInfoAccountController类,将用户注册的信息添加到数据库中

MyAccount

1、只有一个Label标签,用于在用户“账户创建”、“用户账户更新”和“用户登录”的时候显示相应的信息

1、根据用户的动作(create/update/signin),给Label绑定不同的显示内容

EditAccount

1、显示当前用户的注册信息

1、从Session中读取当前用户的注册信息,并绑定到页面的各显示控件上

2、调用AccountController中定义的UpdateAccount()方法,将用户对账户信息的更改保存回数据源

SignOut

1、显示用户成功注销的信息

1、调用AccountController中定义的LogOut()方法,注销当前用户

Search

1、显示搜索结果

1、针对用户输入的关键字,调用底层定义的方法进行搜索

2根据关键字的缓存是否存在,判断针对此关键字的查询结果是否已经被缓存过。如果已经缓存过,则直接从缓存中提取出结果集(IList接口引用);若没有缓存过,则要调用底层方法,返回结果集,然后缓存起来

3、但这种缓存机制会出现问题!如果在查询结果被缓存过之后,即使数据库中的数据源内容更改了,显示出来的查询结果仍然不会被更新!!!

4、关闭当前浏览器也不行!缓存不是针对当前会话的!!!而似乎是针对全局的,也就是Application级的!

WebServices

WebServices.asmx

1、使用了BLL层的OrderRead

2、根据传入的orderId,返回相应的OrderInfo对象

 

2、              表示层主要有以下几大块功能:

(1)        用户注册

(2)        用户登录、注销

(3)        按照CategoryProductItem的层次进行浏览

(4)        购物车:由ShoppingCart.aspxCart.ascxCartController.cs组成。还有BLL中的Cart.csModel中的CartItemInfo.cs

(5)        订单生成

(6)        搜索

3、              AccountController.csCartController.cs类,名称虽然叫做xxxController,但是实际作用却类似于MVC模式中的M!这是一组对“数据存储”(无论是数据库或购物车Session)进行操作的类

 

三、 启发:

1、             一下子看不懂没关系,可以分散着,看每个部分实现的功能,然后再进行整体考虑——关键的问题是——坚持!!!!!!

2、              代码中,若涉及到使用某字符串进行赋值的时候,大都是在代码头部使用常量,将这些要赋值的字符串先赋予常量。在真正的代码段当中只使用这些定义好的常量就可以了!

3、              组织很多同类型对象的方法——使用ArrayList;返回很多同类型对象的方法——返回ArrayList的引用

 

四、 问题:

1、              AutoEventWireup属性?

2、              enableSessionState="ReadOnly"

3、              FormsAuthentication类的用法?

4、              AccountController.cs文件,创建用户的时候(CreateAccount()方法),又写Session又写Cookie,有什么用?

5、              OnLoad()方法的用法?!与Page_Load()方法的异同?

6、              ASP.NET缓存的问题——在知识漏洞的文档当中已经列出

原创粉丝点击