PetShop分析

一:Petshop的系统架构:

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

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

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

1:MSPetShop4

PetShop分析 

Product:宠物商品目录

Category:宠物类别相关信息

  Supplier:宠物供应商信息

Item:单个宠物详细信息

Inventory:宠物库存信息

2:MSPetShop4Orders

PetShop分析 

Orders:商品订单详细信息

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

OrderStatus:记录订单的状态

3:MSPetShop4Profile

PetShop分析 

Account:记录客户的基本信息

Profile:客户活动的基本信息

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

4:MSPetShop4Services

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

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

DBUtility

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

PetShop分析 

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

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

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

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

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

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

PetShop分析 

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

PetShop分析 

业务实体项目 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();

(面向接口编程)。

PetShop分析 

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:更新购物车或者意向清单中的商品数量

表示层 系统的界面。

二:项目列表:

PetShop分析 

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实现具体策略角色。

你可能感兴趣的:(sh)