一: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 |
Petshop 分析
最新推荐文章于 2024-08-11 16:01:20 发布