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
暂时只看了这么多,以后有时间继续分解,如果你有不同的见解或经验,也请写下来,好让大家来共同学习,共同探讨,共同进步。
(作者:李天平 转载请注明)
具体介绍可以参看MSDN:
.NET Pet Shop 4: Migrating an ASP.NET 1.1 Application to 2.0
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/bdasamppet4.asp
下载:
posted on 2006-04-17 21:21 【李天平】 阅读(1834) 评论(13) 编辑 收藏 收藏至365Key 所属分类: ASP.NET开发
评论
不错,学习的好资料!期待下篇 回复
# re: Microsoft .NET Pet Shop 4 架构与技术分析 2006-04-17 22:22 return_ff
嗯,写的通透明了。关注后续。 回复
# re: Microsoft .NET Pet Shop 4 架构与技术分析 2006-04-17 22:58 love coding
如果现在客户要加入统计的功能(用GRIDVIEW或其他列表控件显示出来),这些统计可能涉及到很多表。如果要天平兄在petshop下加入这些功能,你会怎么设计? 回复
# re: Microsoft .NET Pet Shop 4 架构与技术分析 2006-04-18 00:11 wind2
我在试着模拟PETSHOP的结构重定我以前的项目,有个不明白的地方就是,PETSHOP中大量使用了接口,这是为什么?是不是因为方便团队开发组件的使用。
回复
# re: Microsoft .NET Pet Shop 4 架构与技术分析 2006-04-18 03:22 晓风残月
@wind2
OOP中接口好处非常多,
一方面通过接口可以定义一种契约、协定关系,实现盖接口的类就必须实现这些协定,同时也对外界提供了具体类调用的统一接口,Petshop3/4数据访问层使用抽象工厂模式实现多数据库支持里面利用时,就是利用了接口这一特性,这样业务层只需要关心接口定义,不需要关心数据层具体实现是SQLServer还是Oracle;
同时接口确实简化了开发复杂性,特别是团队开发时候,因为接口比具体类简单,一般只有行为和属性的定义,而没有实现细节,而且通过接口就可以实现同一个契约下的多个具体实现独立开发;
另外,有人说过,GoF的23个设计模式,通篇都在讲“面向接口编程”,因此从某种程度上看,接口是设计模式的实现基础
...... 回复
# re: Microsoft .NET Pet Shop 4 架构与技术分析 2006-04-18 09:04 Hurry
配置错误
说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。
分析器错误信息: 未能使用提供程序“RsaProtectedConfigurationProvider”进行解密。提供程序返回错误信息为: 打不开 RSA 密钥容器。
源错误:
行 2: <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
行 3: <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
行 4: <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#">
行 5: <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"/>
行 6: <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
源文件: D:/Program Files/Microsoft/.NET Pet Shop 4.0/PrecompiledWeb/Web/web.config 行: 4
这啥意思 回复
# re: Microsoft .NET Pet Shop 4 架构与技术分析 2006-04-18 11:19 Stanley.P.H
请教:为什么petshop里面用了4个DataBase,这样做的好处是什么?如何处理数据同步的问题呢? 回复
# re: Microsoft .NET Pet Shop 4 架构与技术分析 2006-04-18 12:35 zxWraith
貌似楼主安装petshop4.0过程不正常啊,怎么还有个空文件夹?
回复
# re: Microsoft .NET Pet Shop 4 架构与技术分析 2006-04-18 17:34 高海东
好 回复
# re: Microsoft .NET Pet Shop 4 架构与技术分析 2006-04-18 17:46 Terrylee
PetShop4.0很不错,值得去研究
还有外观模式的运用、依赖注入等 回复
# re: Microsoft .NET Pet Shop 4 架构与技术分析 2006-04-19 10:11 yekedong@gmail.com
我们几乎所有的项目都用petshop模式,现在出来4.0了,真是兴奋!
希望LTP兄继续深入,我每天都在关注。 回复
# re: Microsoft .NET Pet Shop 4 架构与技术分析 2006-04-21 01:18 tom8251
请教:对于"Profile的数据访问层"有点不解,profile项目里的PetShopProfileProvider.cs并不是对IProfileDAL项目里的IPetShopProfileProvider.cs,为何又叫Profile项目为"Profile的数据访问层" 回复
# re: Microsoft .NET Pet Shop 4 架构与技术分析 2006-04-29 08:59 姚伟程
大哥 太谢谢你了
如果你在继续写细点 我就爱死你啦 回复
# re: Microsoft .NET Pet Shop 4 架构与技术分析 2006-04-17 22:07 Frank