学习.net很久了,但是都只是会简单的应用,并没有真正的阅读过什么好书!借用C、C++那点底子,做了几个不堪入目的程序(现在回想起来,那真的不成样子)。不经意间,才知道微软还有PetShop这个东西,我的浅薄阿!下面是转载来的有关PetShop的一些资料,具体出处不记得了,拿来与新人分享。
1
.项目概述与架构分析
微软刚推出了基于
ASP.NET 2.0
下的
Pet Shop 4,
该版本有了一个全新的用户界面。是研究
ASP.NET 2.0
的好范例啊,大家都知道,一直以来,在
.NET
和
Java
之间争论不休,到底使用哪个平台开发的企业级应用性能最好、结构最优、生产力最高。为了用事实说话,通过对项目各方面的性能评估进而在比较
.NET
和
Java
的高下。用户做比较的这个项目就是
Petshop
。正因为
Petshop
肩负着上面所说的重任,各方面必须是最优的,架构设计应该是经过慎重考虑的。所以其一经推出,便成为了开发者、架构师等人学习、研究的典范。
日前微软推出了基于
.NET Framework 2.0
开发的
Petshop 4
。新的
Petshop4
实现了与
Petshop 3
相同甚至更多的特性,由于采用了
Master Pages
,
Membership
,以及
Profile
,
SqlCacheDependency
,但是代码量却减少了四分之一。同时,在事务、数据缓存、安全方面使用了
.NET 2.0
附带的特性,构建了一个灵活的最佳实践的应用程序。
他们利用了
Project Conversion Wizard
把项目从
ASP.NET 1.1
移植到了
ASP.NET 2.0
,然后做了以下改动:
1
.用
System.Transactions
代替了原来的
Serviced Components
提供的事务功能
代码实现:
PetShop.BLL.OrderSynchronous
的
public
void
Insert(PetShop.Model.
OrderInfo
order)
。
2
.用强类型的范型集合代替了原来的弱类型集合
public
IList
<
ProductInfo
> GetProductsByCategory(
string
category)
{
// Return new if the string is empty
if
(
string
.IsNullOrEmpty(category))
return
new
List
<
ProductInfo
>();
// Run a search against the data store
return
dal.GetProductsByCategory(category);
}
3
.采用
ASP.NET 2.0 Membership
来做认证和授权
4
.创建了针对
Oracle 10g
的
Custom ASP.NET 2.0 Membership Provider
5
.利用
ASP.NET 2.0
的
Custom Oracle
和
SQL Server Profile Providers
做用户状态管理,包括购物车等
6
.采用了
Master Pages
,取代了原来的用户控件,来实现统一的界面效果
7
.使用了
ASP.NET 2.0 Wizard
控件实现
check-out
8
.使用了
SqlCacheDependency
来实现数据库层次的缓存更新
(cache invalidation)
功能
9
.使用了消息队列来实现异时订单处理。
2.
整体架构:
数据库
:(暂略)
项目列表
:从整体可以看出,
Pet Shop 4
的项目体系已经很庞大,考虑的方面也较
3.0
更全面复杂。
序号
|
项目名称
|
描述
|
1
|
BLL
|
业务逻辑层
|
2
|
CacheDependencyFactory
|
缓存依赖类的
工厂类
|
3
|
WEB
|
表示层
|
4
|
DALFactory
|
数据层的抽象工厂
|
5
|
DBUtility
|
数据访问类组件
|
6
|
IBLLStrategy
|
同步/异步策略接口
|
7
|
ICacheDependency
|
缓存依赖类
接口
|
8
|
IDAL
|
数据访问层接口定义
|
9
|
IMessaging
|
异时处理消息队列接口定义
|
10
|
IProfileDAL
|
Profile的数据访问层接口定义
|
11
|
Membership
|
Membership认证和授权管理
|
12
|
MessagingFactory
|
异时处理消息队列的
抽象工厂
|
13
|
Model
|
业务实体
|
14
|
MSMQMessaging
|
异时处理消息队列的实现
|
15
|
OracleDAL
|
Oracle数据访问层
|
16
|
OracleProfileDAL
|
Oracle
的
Profile Providers
做用户状态管理,包括购物车等
|
17
|
OrderProcessor
|
后台处理进程,处理订单队列
|
18
|
Profile
|
Profile的数据访问层
|
19
|
ProfileDALFactory
|
ProfileDAL的工厂类(反射创建ProfileDAL)
|
20
|
SQLProfileDAL
|
SQL Server 的Profile Providers
做用户状态管理,包括购物车等
|
21
|
SQLServerDAL
|
SQLServer数据访问层
|
22
|
TableCacheDependency
|
缓存依赖实现类
|
项目分解
:
由于整体已经有
22
个项目,所以,对于初学者一看就晕了,所以,我做了分解,可以大体上分几块去理解。
序号
|
项目名称
|
描述
|
1
|
WEB
|
表示层
|
2
|
Model
|
业务实体
|
3
|
BLL
|
业务逻辑层
|
4
|
DALFactory
|
数据层的抽象工厂
|
5
|
IDAL
|
数据访问层接口定义
|
6
|
SQLServerDAL
|
SQLServer数据访问层
|
7
|
OracleDAL
|
Oracle数据访问层
|
8
|
DBUtility
|
数据库访问组件基础类
|
9
|
CacheDependencyFactory
|
缓存依赖类的
工厂类
|
10
|
ICacheDependency
|
缓存依赖类
接口
|
11
|
TableCacheDependency
|
缓存依赖实现类
|
12
|
IBLLStrategy
|
同步
/
异步处理策略接口
(
实现在
bll
根据配置反射选择
)
|
13
|
MessagingFactory
|
异时处理消息队列的
抽象工厂
|
14
|
IMessaging
|
异时处理消息队列接口定义
|
15
|
MSMQMessaging
|
异时处理消息队列的实现
|
16
|
Profile
|
Profile
的数据访问层
|
17
|
ProfileDALFactory
|
ProfileDAL
的工厂类
(
反射创建
ProfileDAL)
|
18
|
IProfileDAL
|
Profile
的数据访问层接口定义
|
19
|
OracleProfileDAL
|
Oracle
的
Profile Providers
做用户状态管理
|
20
|
SQLProfileDAL
|
SQL Server
的
Profile Providers
做用户状态管理
|
21
|
Membership
|
Membership
认证和授权管理
|
22
|
OrderProcessor
|
后台处理进程,处理订单队列
|
3
.
Petshop 4
中的设计模式
:
工厂模式
:
首当其冲的就是工厂模式,很容易就可以看出来,也是应用最多的。
DALFactory
:数据访问层的抽象工厂(决定创建哪种数据库类型的数据访问层。可以选择:
SQLServer
,
Oracle
)
CacheDependencyFactory
:
缓存依赖类的
工厂类。(创建具体表的缓存依赖)
MessagingFactory
:
异时处理消息队列的
抽象工厂(反射创建具体的
异时处理类
)
ProfileDALFactory
:
ProfileDAL
的工厂类
(
反射
选择
创建
Oracle
和
SQL Server
的
ProfileDAL)
策略模式
:
IorderStrategy
中介模式
CategoryDataProxy ItemDataProxy
ProductDataProxy
如果你有不同的见解或经验,也请写下来,好让大家来共同学习,共同探讨,共同进步,同时也帮助我这个新人提高水平