博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Duwamish 7.0---(I结构分析)

Posted on 2006-03-13 17:28  HH  阅读(264)  评论(0编辑  收藏  举报

Duwamish结构分析:
Duwamish 7.0 是一个典型的N层架构,其结构分为四个逻辑层:


***************************************************************************
***************************************************************************

Web 层 [表示层]

---目的:为客户端提供对应用程序的访问

---组成:由 ASP.NET Web 窗体和代码隐藏文件组成。Web 窗体只是用 HTML 提供用户操作,而代码隐藏文件实现各种控件的事件处理

---任务:只负责接受用户的输入并返回结果

book.aspx --图书的详细信息页

categories.aspx --图书分类显示页

default.aspx --首页,显示精选图书

errorpage.aspx --错误提示页

searchresults.aspx --搜索结果页,不支持分页

shoppingcart.aspx  --购物车页,支持批量修改和更新

viewsource.aspx --源代码展示页

secure\account.aspx  --新客户注册页及客户修改个人信息页

secure\checkout.aspx --确认购买页面,填写收货人的详细地址和联系方式,填入信用卡的信息,列出购买的清单及总的费用信息。

secure\order.aspx  --显示用户的订单信息,以供用户打印该订单

secure\logon.aspx  --用户登录页

用户控件统一放在modules文件夹下:

accountmodule.ascx    对应于account.aspx页面,新客户注册页及客户修改个人信息

bannermodule.ascx    每一页都包含有该用户控件,它定义的页面的头部信息,在页面中看到的头上的哪片黑色的区域就是它了,包含一个图片,三个按钮。

categoriesmodule.ascx    每一页都包含有该用户控件,它显示了书籍的分类信息。在页面的左边的”Browse Categories”文字开始到” Behind The Scenes”文字结束就是该控件的界面内容了

checkoutmodule.ascx    对应于checkout.aspx页,因为checkout.aspx页是一个按步骤操作的页(用panel控件控制),每走一页,checkoutmodule.ascx控件中的箭头就往前走或往后退一格。在父页面中通过控制checkoutmodule.ascx控件的Stage属性来控制

dailypickmodule.ascx    用于显示推荐的图书信息,在default.aspx页和categories.aspx页中用到

searchmodule.ascx    搜索功能控件,每页的搜索功能都由这个控件实现

viewsourcemodule.ascx    查看源码功能控件,每页的查看源功能都是由这个用户控件实现

***************************************************************************
***************************************************************************

Business/Facade 业务外观层 [中间层]

---目的:业务外观层用作隔离层,它将用户界面与各种业务功能的实现隔离开来

---组成:.cs代码。可以封装成类,直接调用

---任务:实现各种功能模块


类名称:CustomerSystem.cs   

类功能:CustomerSystem类是客户系统的业务外观层,它为客户子系统提供了一个简单的接口,该类支持远程处理的应用程序中跨应用程序域边界访问。

类组成:CustomerSystem类只有三个方法,分别是:GetCustomerByEmail方法(从email和密码获得客户的信息),UpdateCustomer方法(更新客户的信息,接收一个CustomerData对象),CreateCustomer方法(用于创建一个新的客户了)


类名称:OrderSystem.cs   

类功能:OrderSystem类用于处理订单的业务外观

类组成:它只有两个方法:GetOrderSummary方法(用于统计订单),AddOrder方法(用于新增一个订单)


类名称:ProductSystem.cs

类功能:ProductSystem类用于处理书的业务外观

类组成:GetCategories方法(通过分类的id获得类别自身的信息);GetCategoryItems方法(通过分类的id获得该类下的所有的书的信息);GetDailyPickItems方法(通过分类的id获得该类下的推荐书的信息);GetItemById方法(通过书的id获得有关书的信息);GetSearchItems方法(根据指定的检索字段条件以及书名的关键字查询书的信息)

 

###只有方法,没有属性### 是对web表示层中页面中操作的定义的方法,从而为web表示层提供了一个单一而简单的接口

 

***************************************************************************
***************************************************************************

Business/Rules  业务规则层 [中间层]

---目的:包含各种业务规则和逻辑的实现

---组成:.cs代码。可以封装成类,直接调用

---任务:实现验证任务,如客户帐户和书籍订单的验证


类名称:Customer.cs    

类功能:验证客户信息

类组成:它有一个私有的常量REGEXP_ISVALIDEMAIL,用于验证客户的输入的email地址是否正确;insert方法用于验证和新建一条客户记录;update方法用于更新某个客户的信息;GetCustomerByEmail私有方法通过email验证是否已存在该客户的信息;Validate私有方法用于验证customer数据是否正确,它通过调用类内的IsValidEmail(验证email方法)和IsValidField(验证字段的内容是否超长字段规定的长度)来验证整个customer对象是否正确


类名称:Order.cs

类组成:私有的常量MINIMUM_SHIPPING_CHARGE,私有的常量STANDARD_ITEM_COUNT。CalculateTax方法用于计算税收。CalculateShipping用于计算购物的总价格。InsertOrder方法用于插入一个订单;IsValidField用于验证字段的正确性


***************************************************************************
***************************************************************************

DataAccess  数据访问层 [数据层]

---目的:为业务层(外观层、规则层)提供数据服务

---组成:.cs代码。可以封装成类,直接调用

---任务:实现数据库的操作


类名称:Books.cs

类组成:Books类有许多的方法,构造函数Books首先创建了一个SqlDataAdapter对象,然后指定了该对象的SqlConnection对象。Books类实现了Idisposable接口,实现的Dispose方法,用于销毁该对象。下面的各个方法都是根据不同的参数获得BookData,包括:GetBooksByCategorId(对应于同名的存储过程,通过类别id获得bookdata数据集对象),GetDailyPickBooksByCategoryId(对应于同名的存储过程,通过类别id获得推荐的bookdata数据集对象),GetBookById(通过书的id取得书的信息),GetBooksByAuthor(通过作者名获得书的信息,可能有N条记录),GetBooksByISBN(通过isbn获得书的信息),GetBooksBySubject,GetBooksByTitle,上述的方法其它都是通过FillBookData(通过传进行存储过程名作参数和参数值执行SqlDataAdapter对象的fill方法填充bookdata对象)方法执行对应的存储过程来获得BookData


类名称:Categories.cs

类组成:Categories类的方法比较少,除了构造函数和dispose方法外,就只有GetCategories方法(通过分类的id获得该类的父、本、子三级的分类对象)和FillCategoryData私有方法(为GetCategories方法从底层数据库中获取数据到CategoriesData)。


类名称:Customers.cs

类组成:Customers类除了构造函数和dispose方法外,有三个公开的方法,LoadCustomerByEmail方法(调用GetLoadCommand方法,获得sqlcommand对象后,执行GetCustomerByEmail存储过程,获得customerdata对象),UpdateCustomer方法(更新整个的customer对象,在UpdateCustomer存储过程中又调用了UpdateCustomerAddress存储过程来更新Addresses表。它有一个缺点就是每次更都会完全的更新两张表的所有的内容),InsertCustomer(与UpdateCustomer方法类似,它调用InsertCustomer和InsertAddress两个存储过程完成两个表的插入工作,唯一不同的插入操作是先插入主表,然后再插入从表。更新是先从表,后主表。),及三个私有的为前三个公开的方法服务的方法。GetLoadCommand方法(生成调用GetCustomerByEmail存储过程的sqlcommand命令返回),GetInsertCommand(生成调用InsertCustomer存储过程的sqlcommand命令返回,它用了sqlparameter对象的sourcecolumn属性映射对dataset的某个对象),GetUpdateCommand(它与GetInsertCommand方法类似)。


类名称:Orders.cs

类组成:Orders除了构造函数和dispose方法外,也只有一个公开的方法InsertOrderDetail方法(插入一个订单到数据库,详细的说明看源码注释)及一个私有方法GetInsertCommand(初始化DataAdapter对象的Insert命令参数集)


##数据访问层负责对业务层提供数据操作,也就是它负责和底层的数据库打交道 对数据库的所有操作均由存储过程完成,数据层只是在前台调用后台的存储过程##