`
wangyihust
  • 浏览: 425372 次
文章分类
社区版块
存档分类
最新评论

Microsoft .NET Pet Shop 4 架构与技术分析

阅读更多

1.项目概述与架构分析
       微软刚推出了基于ASP.NET 2.0下的Pet Shop 4, 该版本有了一个全新的用户界面。是研究ASP.NET 2.0的好范例啊,大家都知道,一直以来,在.NETJava之间争论不休,到底使用哪个平台开发的企业级应用性能最好、结构最优、生产力最高。为了用事实说话,通过对项目各方面的性能评估进而在比较.NETJava的高下。用户做比较的这个项目就是Petshop。正因为Petshop肩负着上面所说的重任,各方面必须是最优的,架构设计应该是经过慎重考虑的。所以其一经推出,便成为了开发者、架构师等人学习、研究的典范。<o:p></o:p>

     日前微软推出了基于.NET Framework 2.0开发的Petshop 4。新的Petshop4实现了与Petshop 3相同甚至更多的特性,由于采用了Master PagesMembership,以及ProfileSqlCacheDependency,但是代码量却减少了四分之一。同时,在事务、数据缓存、安全方面使用了.NET 2.0附带的特性,构建了一个灵活的最佳实践的应用程序。<o:p></o:p>

<o:p> </o:p>

他们利用了Project Conversion Wizard把项目从ASP.NET 1.1移植到了ASP.NET 2.0,然后做了以下改动:<o:p></o:p>

1.用System.Transactions代替了原来的Serviced Components提供的事务功能<o:p></o:p>

代码实现:PetShop.BLL.OrderSynchronous public void Insert(PetShop.Model.OrderInfo order)<o:p></o:p>

2.用强类型的范型集合代替了原来的弱类型集合<o:p></o:p>

        public IList<ProductInfo> GetProductsByCategory(string category)<o:p></o:p>

        {<o:p></o:p>

            // Return new if the string is empty<o:p></o:p>

            if (string.IsNullOrEmpty(category))<o:p></o:p>

                return new List<ProductInfo>();<o:p></o:p>

<o:p> </o:p>

            // Run a search against the data store<o:p></o:p>

            return dal.GetProductsByCategory(category);<o:p></o:p>

        }<o:p></o:p>

3.采用ASP.NET 2.0 Membership来做认证和授权 <o:p></o:p>

4.创建了针对Oracle <st1:chmetcnv hasspace="False" numbertype="1" negative="False" sourcevalue="10" w:st="on" unitname="g" tcsc="0">10g</st1:chmetcnv>Custom  ASP.NET 2.0 Membership Provider<o:p></o:p>

5.利用ASP.NET 2.0Custom Oracle SQL Server Profile Providers 做用户状态管理,包括购物车等<o:p></o:p>

6.采用了Master Pages,取代了原来的用户控件,来实现统一的界面效果<o:p></o:p>

7.使用了ASP.NET 2.0 Wizard控件实现check-out <o:p></o:p>

8.使用了SqlCacheDependency来实现数据库层次的缓存更新(cache invalidation)功能<o:p></o:p>

9.使用了消息队列来实现异时订单处理。

<o:p>4.0版本相对于3.0版本代码量的变化:(总体代码减少了25%)</o:p>

<o:p>

  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
</o:p>

<o:p>1) 使用Wizard组件实现sign-in and check-out steps </o:p>

<o:p>2)使用Master Page减少了HTML代码</o:p>

<o:p>3)使用Membership进行权限处理</o:p>

<o:p></o:p>

<o:p>同时在4.0版本中新增加的代码:</o:p>

<o:p>

Custom Profile 853
Oracle Membership 586
Cache Dependency 90
Message Queue 147
Total Lines of Code 1,676
</o:p>

<o:p></o:p>

<o:p> </o:p>

2.整体架构:<o:p></o:p>


项目列表:从整体可以看出,Pet Shop 4的项目体系已经很庞大,考虑的方面也较3.0更全面复杂。<o:p></o:p>

<o:p></o:p>

<o:p> </o:p>

序号<o:p></o:p>

项目名称<o:p></o:p>

描述<o:p></o:p>

1<o:p></o:p>

BLL<o:p></o:p>

业务逻辑层<o:p></o:p>

2<o:p></o:p>

CacheDependencyFactory<o:p></o:p>

缓存依赖类的工厂类<o:p></o:p>

3<o:p></o:p>

WEB<o:p></o:p>

表示层<o:p></o:p>

4<o:p></o:p>

DALFactory<o:p></o:p>

数据层的抽象工厂<o:p></o:p>

5<o:p></o:p>

DBUtility<o:p></o:p>

数据访问类组件<o:p></o:p>

6<o:p></o:p>

IBLLStrategy<o:p></o:p>

同步/异步策略接口<o:p></o:p>

7<o:p></o:p>

ICacheDependency<o:p></o:p>

缓存依赖类接口<o:p></o:p>

8<o:p></o:p>

IDAL<o:p></o:p>

数据访问层接口定义<o:p></o:p>

9<o:p></o:p>

IMessaging<o:p></o:p>

异时处理消息队列接口定义<o:p></o:p>

10<o:p></o:p>

IProfileDAL<o:p></o:p>

Profile的数据访问层接口定义<o:p></o:p>

11<o:p></o:p>

Membership<o:p></o:p>

Membership认证和授权管理<o:p></o:p>

12<o:p></o:p>

MessagingFactory<o:p></o:p>

异时处理消息队列的抽象工厂<o:p></o:p>

13<o:p></o:p>

Model<o:p></o:p>

业务实体<o:p></o:p>

14<o:p></o:p>

MSMQMessaging<o:p></o:p>

异时处理消息队列的实现<o:p></o:p>

15<o:p></o:p>

OracleDAL<o:p></o:p>

Oracle数据访问层<o:p></o:p>

16<o:p></o:p>

OracleProfileDAL<o:p></o:p>

OracleProfile Providers <o:p></o:p>

做用户状态管理,包括购物车等<o:p></o:p>

17<o:p></o:p>

OrderProcessor<o:p></o:p>

后台处理进程,处理订单队列<o:p></o:p>

18<o:p></o:p>

Profile<o:p></o:p>

Profile的数据访问层<o:p></o:p>

19<o:p></o:p>

ProfileDALFactory<o:p></o:p>

ProfileDAL的工厂类(反射创建ProfileDAL)<o:p></o:p>

20<o:p></o:p>

SQLProfileDAL<o:p></o:p>

SQL Server Profile Providers <o:p></o:p>

做用户状态管理,包括购物车等<o:p></o:p>

21<o:p></o:p>

SQLServerDAL<o:p></o:p>

SQLServer数据访问层<o:p></o:p>

22<o:p></o:p>

TableCacheDependency<o:p></o:p>

缓存依赖实现类<o:p></o:p>

<o:p> </o:p>

项目分解<o:p></o:p>

由于整体已经有22个项目,所以,对于初学者一看就晕了,所以,我做了分解,可以大体上分几块去理解。<o:p></o:p>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics