Petshop 分析

一:Petshop的系统架构:

P etshop采用了典型的三层架构,从下而上为:数据访问层、业务逻辑层、表示层。

数据访问层 ,其主要功能就是负责数据库的访问,简单的说法就是完成对数据库的增删改查等基本操作。

安装后,有四个数据库,MSPetShop4,MSPetShop4Orders,MSPetShop4Profile,MSPetShop4Services。

1:MSPetShop4

Product:宠物商品目录

Category:宠物类别相关信息

Supplier:宠物供应商信息

Item:单个宠物详细信息

Inventory:宠物库存信息

2:MSPetShop4Orders

Orders:商品订单详细信息

LineItem:存储订单中所购买商品的信息

OrderStatus:记录订单的状态

3:MSPetShop4Profile

Account:记录客户的基本信息

Profile:客户活动的基本信息

Cart:客户购物车和意向清单中的信息

4:MSPetShop4Services

      aspnet_Applications :存储数据库所涉及应用程序的有关信息

      aspnet_Membership :存储与用户有关的信息

DBUtility

是数据访问的辅助,其中SqlHelper类图如下

CachedParameters()用于实现命令参数缓存的功能。

GetCachedParameters()方法用于获取缓存中的命令参数。

ExcuteReader()用于执行SqlCommand,并返回一个SqlDataReader对象。

ExecuteScalar()用于执行SQL文本或者存储过程,并返回结果集中第一行的第一列。

PrepareCommand()用于为执行SQL文本命令和存储过程,而设置SqlCommand相关参数。

在数据访问层中,使用IDAL抽象出数据访问逻辑,并以DALFactory作为数据访问层对象的工厂,IDAL支持SQL Server和Oracle,Model则是业务实体对象。其结构图如下:

业务逻辑层 ,是系统的核心部分,关系到整个系统的业务。通过调用数据访问层,来完成一系列的业务操作。

业务实体项目 Model

业务实体和数据表中无必然的联系,业务实体是综合分析应用程序功能和数据库中的表后的结果。

站点的页面需要加载数据时,表示层向BLL项目发送请求,如:

         private void BindCategories()

         {

             Category category = new Category ();

             repCategories.DataSource = category.GetCategories();

             repCategories.DataBind();

     }

然后 category.GetCategories() 调用BLL项目中的 GetCategories() 方法,

public IList < CategoryInfo > GetCategories()

         {

             return dal.GetCategories();

     }

而dal为一个 ICategory 接口类型的对象

private static readonly ICategory dal = PetShop.DALFactory. DataAccess .CreateCategory();

(面向接口编程)。

Category

GetCategories() :获取所有宠物类别信息

GetCategory( string categoryId) :获取单个宠物类别

Item

GetItem( string itemId) GetItemsByProduct( string productId) :根据不同的参数获得单个宠物信息

Inventory

CurrentQuantityInStock( string itemId) :获取宠物库存数量

TakeStock( LineItemInfo [] items) :更新库存量

Product :通过不同的参数获得宠物目录信息

GetProductsByCategory( string category)

GetProductsBySearch( string text)

GetProduct( string productId)

Cart:

Add:向购物车或者意向清单中添加商品

Clear:清除购物车或者意向清单中商品

GetOrderLineItems:转换类型

Remove:根据参数删除商品

SetQuantity:更新购物车或者意向清单中的商品数量

表示层 系统的界面。

二:项目列表:

1:BLL 业务逻辑层

2:CacheDependencyFactory 缓存工厂类

3:Web 表示层

4:DALFactory 数据访问层的抽象工厂

5:DBUtility 数据访问的方法

6:IBLLStrategy 实现同步异步订单处理功能而定义的 接口 IOrderStrategy

7: ICacheDependency IPetShopCacheDependency 接口,实现简单工厂模式中的抽象接口

8:IDAL 定义了数据访问层的接口

9:IMessaging 定义了订单消息队列的接口

10:IProfileDAL 定义了Profile数据访问层接口

11:Membership 完成了成员资格管理的数据访问

12:MessagingFactory 处理消息队列的抽象工厂

13:Model 业务实体类

14:MSMQMesageing 实现了IOrder中定义的方法

15:OracleDAL Oracle数据访问层

16:OracleProfileDAL 数据库为Oracle时,抽象工厂中的具体产品类,实现了IProfileDAL定义的接口成员方法

17: OrderProcessor:处理来自消息队列的异步订单

18:Profile:Profile的数据访问层

19:ProfileDALFactory: ProfileDAL的工厂类

20: SQLProfileDAL 数据库为SQL Server时,抽象工厂中的具体产品类,实现了IProfileDAL

定义的接口成员方法

21: SQLServerDAL SQL Server的数据访问层

22: TableCacheDependency:缓存依赖的产品类

三:PetShop4中的设计模式

1:工厂模式:

DALFactory项目中的DataAccess为工厂类,IDAL项目作为抽象产品接口,而SQLServerDAL则是具体的产品类。

以下利用了反射技术,动态的加载指定类型。

public static PetShop.IDAL. ICategory CreateCategory()

{

      string className = path + ".Category" ;

      return (PetShop.IDAL. ICategory ) Assembly .Load(path).CreateInstance(className);

}

2:策略模式:

策略模式主要是针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而使得它们可以相互替换。

策略模式可以让算法在不影响客户端的情况下发生变化。

      BLL项目中的Order类实现环境角色

      IBLLStrategy项目中IOrderStrategry接口实现抽象策略角色。

      BLL中的OrderSynchronous和OrderAsynchronous实现具体策略角色。
[转]:http://www.cnblogs.com/sunfishlu/archive/2008/02/02/1062049.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值