petshop4.0设计说明 (转)
一、项目名称及描述:(实现步骤为:4-3-6-5-2-1)
1、WEB=表示层
2、BLL=业务逻辑层
3、IDAL=数据访问层接口定义
4、Model=业务实体
5、DALFactory=数据层的抽象工厂(创建反射)
6、SQLServerDAL=SQLServer数据访问层 / OracleDAL=Oracle数据访问层
DBUtility 数据库访问组件基础类
二、项目引用关系
1、Web 引用 BLL。
2、BLL 引用 IDAL,Model,使用DALFactory创建实例。
3、IDAL 引用 Model。
4、Model 无引用。
5、DALFactory 引用IDAL,通过读取web.config里设置的程序集,加载类的实例,返回给BLL使用。
6、SQLServerDAL 引用 Model和IDAL,被DALFactory加载的程序集,实现接口里的方法。
三、实现步骤
1、创建Model,实现业务实体。
2、创建IDAL,实现接口。
3、创建SQLServerDAL,实现接口里的方法。
4、增加web.config里的配置信息,为SQLServerDAL的程序集。
5、创建DALFactory,返回程序集的指定类的实例。
6、创建BLL,调用DALFactory,得到程序集指定类的实例,完成数据操作方法。
7、创建WEB,调用BLL里的数据操作方法。
注意:
1、web.config里的程序集名称必须与SQLServerDAL里的输出程序集名称一致。
2、DALFactory里只需要一个DataAccess类,可以完成创建所有的程序集实例。
3、项目创建后,注意修改各项目的默认命名空间和程序集名称。
4、注意修改解决方案里的项目依赖。
5、注意在解决方案里增加各项目引用。
1
WEB
表示层
2
Model
PetShop.Model PetShop.Model 业务实体
3
BLL
PetShop.BLL PetShop.BLL 业务逻辑层
4
DALFactory
PetShop.DAL PetShop.DALFactory 数据层的抽象工厂
5
IDAL
PetShop.IDAL PetShop.IDAL 数据访问层接口定义
6
SQLServerDAL
PetShop.SQLServerDAL PetShop.SQLServerDAL SQLServer数据访问层
7
OracleDAL
PetShop.OracleDAL PetShop.OracleDAL Oracle数据访问层
8
DBUtility
PetShop.DBUtility PetShop.DBUtility 数据库访问组件基础类
9
CacheDependencyFactory
PetShop.CacheDependencyFactory PetShop.CacheDependencyFactory 缓存依赖类的工厂类
10
ICacheDependency
PetShop.ICacheDependency PetShop.ICacheDependency 缓存依赖类接口
11
TableCacheDependency
PetShop.TableCacheDependency PetShop.TableCacheDependency 缓存依赖实现类
12
IBLLStrategy
PetShop.IBLLStrategy PetShop.IBLLStrategy 同步/异步处理策略接口(实现在bll根据配置反射选择)
13
MessagingFactory
PetShop.MessagingFactory PetShop.MessagingFactory 异时处理消息队列的抽象工厂
14
IMessaging
PetShop.IMessaging PetShop.IMessaging 异时处理消息队列接口定义
15
MSMQMessaging
PetShop.MsmqMessaging PetShop.MsmqMessaging 异时处理消息队列的实现
16
Profile
PetShop.Profile PetShop.Profile Profile的数据访问层
17
ProfileDALFactory
PetShop.ProfileDALFactory PetShop.ProfileDALFactory ProfileDAL的工厂类(反射创建ProfileDAL)
18
IProfileDAL
PetShop.IProfileDAL PetShop.IProfileDAL Profile的数据访问层接口定义
19
OracleProfileDAL
PetShop.OracleProfileDAL PetShop.OracleProfileDAL Oracle的Profile Providers
做用户状态管理
20
SQLProfileDAL
PetShop.SQLProfileDAL PetShop.SQLProfileDAL SQL Server 的Profile Providers
做用户状态管理
21
Membership
PetShop.Membership PetShop.Membership Membership认证和授权管理
22
OrderProcessor
PetShop.OrderProcessor PetShop.OrderProcessor 后台处理进程,处理订单队列
些项目可以分类来理解,主要包括以下几个部分,
Web 外观层
Bill 业务逻辑层
IDAL 数据访问层接口
DALFactory 数据层的抽象工厂
SQLServerDAL SQL数据访问层
OracleDAL Oracle数据访问层
Model 业务实体层
DBUtility 数据访问组件基础类
CacheDependencyFactory 缓存依赖的工厂类
ICacheDependency 缓存依赖类接口
TableCacheDependency 缓存依赖实现类
IBLLStrategy 同步/异步处理策略接口
MessagingFactory 异时处理消息队列的抽象工厂
IMessaging 异时处理消息队列接口定义
MSMQMessaging 异时消息队列的实现
Profile Profile数据访问层
ProfileDALFactory ProfileDAL的工厂类
IProfileDAL Profile数据访问层接口定义
OracleProfileDALOracle的Profile Providers 做用户状态管理
SQLProfileDALSQL Server 的Profile Providers 做用户状态管理
MembershipMembership认证和授权管理
OrderProcessor后台处理进程,处理订单队列
SQL数据库中含有四个数据库
它们分别为:MSPetShop4 ,MSPetShop4Oreder, MSPetShop4Profile 和MSPetShop4Servers
其中MSPetShop4有如下几个表分别为CateGory Product Item Supplier和Inventory五个表
其中CateGory存储宠物类别有关信息Product存储宠物的商品目录Item存储宠物的详细信息
Supplier存储相关供应商的信息Inventory存储和每种宠物的具体数量
MSPetShop4Order 含有一下三个表其数据库模型如下
Order表存储了订单的详细通信信息OrderStatus记录了订单的状态LineItem记录了订单中的宠物数量等等详细信息
MSPetshopPrifile 的数据库模型如下
其中Profile表记录了客户的基本活动信息
Account 记录了客户的身份地址相关信息
Cart记录了用户的意向清单和购物列表
最后一个数据库就是MSPetShop4Servers它相当于Visual Studio内置的成员和角色管理的数据库
这里不在讨论
!
在这么简单的功能中建如此大的工程和复杂的数据库设计.微软肯定有自己的卖点
下面我们看看PetShop4.0中相对于3.0的新增相关技术!
? |
用 System.Transactions 代替服务组件。 |
? |
用强类型集合的泛型代替松散类型的 ILists。 |
? |
ASP.NET 2.0 成员身份,用于用户身份验证和授权。 |
? |
用于 Oracle 10G 的自定义 ASP.NET 2.0 成员身份提供程序。 |
? |
ASP.NET 2.0 自定义 Oracle 和 SQL Server 配置文件提供程序,用于用户状态管理。 |
? |
用母版页取代 ASP.NET Web 用户控件,从而获得一致的外观。 |
? |
ASP.NET 2.0 向导控件。 |
? |
使用 SqlCacheDependency(而非基于超时)的数据库级缓存失效。 |
? |
启用基于消息队列构建的异步 Order 处理 |
在这个工程中用到了抽象工厂设计模式
我对设计模式了解的很少,明天深入学习一下抽象工厂设计模式,同时试着做一个类似多层的项目以尽快熟悉2005和了解它的新特性
所谓“依懒注入”
就是将应用程序所依赖的组件在运行时动态的加载到应用
程序中。依赖注入的目标并非为应用程序添加更多的功能,而是提升了组件的
重用性,并为应用程序搭建一个具有较强灵活性和扩展性的平台。在程序实现上就用
Assembly.Load(AssemblyName).CreateInstance(typeName)在程序运行时动态创建实例.PetShop4.0中多次应用了与配置文件相强合的反射注入技术。下面就介绍一下反射注入技术在PetShop4.0多层应用程序和应用。
项目名 |
PetShop.CacheDependencyFactory | ||
类名 |
DependencyAccess |
方法 |
privatestaticIPetShopCacheDependency LoadInstance(string className) |
配置文件中的值 |
<appSetting> ………. <add key="CacheDependencyAssembly" value="PetShop.TableCacheDependency"/> …… </appSetting> | ||
代码文件中的实现 |
string path=ConfigurationManager.AppSettings["CacheDependencyAssembly"]; string fullyQualifiedClass = path + "." + className; return (IPetShopCacheDependency)Assembly.Load(path) .CreateInstance(fullyQualifiedClass); | ||
从上面的实现来看其实是很简单的。三个步骤就实现了:两前个步骤,主要是为动态创建 实例提供参数:程序集名称,和类名称(类型名). 1. 执行ConfigurationManager.AppSettings[“keyName”]来获取配置文件中的键值,也就 程序集的名称AssemblyName。 2. 组合类名称typeName。 3. 执行Assembly.Load(AssemblyName).CreateInstance(typeName)进行动太创建实例 其实PetShop4.0中实现反射注入技术都是上面的那种思想。所以下面就省去配置文件中的 信息和实现的代码实现信息,只是统计反射注入技术在PetShop4.0中应用的位置信息。 |
项目名 |
PetShop.DALFactory |
类名 |
DataAccess |
方法 |
1. public static PetShop.IDAL.ICategory CreateCategory() 2. public static PetShop.IDAL.IInventory CreateInventory() 3. public static PetShop.IDAL.IItem CreateItem() 4. public static PetShop.IDAL.IOrder CreateOrder() 5. public static PetShop.IDAL.IProduct CreateProduct() |
项目名 |
PetShop.MessagingFactory |
类名 |
QueueAccess |
方法 |
public static PetShop.IMessaging.IOrder CreateOrder() |
项目名 |
PetShop.ProfileDALFactory |
类名 |
DataAccess |
方法 |
Publics tatic PetShop.IProfileDAL.IPetShopProfileProvider CreatePetShopProfileProvider() |