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.使用了消息队列来实现异时订单处理。
4.0版本相对于3.0版本代码量的变化:(总体代码减少了25%)
| v3 | v4 |
Presentation Layer | 1,822 | 1,365 |
Model | 349 | 395 |
Business Logic Layer | 210 | 199 |
Data Access Layer | 1,538 | 985 |
Total Lines of Code | 3,919 | 2,944 |
1) 使用Wizard组件实现sign-in and check-out steps
2)使用Master Page减少了HTML代码
3)使用Membership进行权限处理
同时在4.0版本中新增加的代码:
Custom Profile | 853 |
Oracle Membership | 586 |
Cache Dependency | 90 |
Message Queue | 147 |
Total Lines of Code | 1,676 |
2.整体架构:
项目列表:从整体可以看出,Pet Shop 4的项目体系已经很庞大,考虑的方面也较3.0更全面复杂。
PetShop 4.0 设计研究——petShop 4.0 的命名空间 以及各个项目模块的说明
序号 | 项目名称 | 程序集名称Assembly Name | 默认命名空间Default Namespace | 描述 |
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的数据访问层接口定义 |