Fov Web 拓展你我的視野,關(guān)注互聯(lián)網(wǎng)和網(wǎng)站相關(guān)技術(shù)與運(yùn)營。
原文:http://www.fovweb.com/web/microsoft-petshop4-architecture-and-technical-analysis/
1.項目概述與架構(gòu)分析
微軟剛推出了基于ASP.NET 2.0下的Pet Shop 4, 該版本有了一個全新的用戶界面。是研究ASP.NET 2.0的好范例啊,大家都知道,一直以來,在.NET和Java之間爭論不休,到底使用哪個平臺開發(fā)的企業(yè)級應(yīng)用性能最好、結(jié)構(gòu)最優(yōu)、生產(chǎn)力最高。為了用事實(shí)說話,通過對項目各方面的性能評估進(jìn)而在比較.NET和Java的高下。用戶做比較的這個項目就是Petshop。正因為Petshop肩負(fù)著上面所說的重任,各方面必須是最優(yōu)的,架構(gòu)設(shè)計應(yīng)該是經(jīng)過慎重考慮的。所以其一經(jīng)推出,便成為了開發(fā)者、架構(gòu)師等人學(xué)習(xí)、研究的典范。
日前微軟推出了基于.NET Framework 2.0開發(fā)的Petshop 4。新的Petshop4實(shí)現(xiàn)了與Petshop 3相同甚至更多的特性,由于采用了Master Pages,Membership,以及Profile,SqlCacheDependency,但是代碼量卻減少了四分之一。同時,在事務(wù)、數(shù)據(jù)緩存、安全方面使用了.NET 2.0附帶的特性,構(gòu)建了一個靈活的最佳實(shí)踐的應(yīng)用程序。
他們利用了Project Conversion Wizard把項目從ASP.NET 1.1移植到了ASP.NET 2.0,然后做了以下改動:
1.用System.Transactions代替了原來的Serviced Components提供的事務(wù)功能
代碼實(shí)現(xiàn):PetShop.BLL.OrderSynchronous 的 public void Insert(PetShop.Model.OrderInfo order)。
2.用強(qiáng)類型的范型集合代替了原來的弱類型集合
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來做認(rèn)證和授權(quán)
4.創(chuàng)建了針對Oracle 10g的Custom
ASP.NET 2.0 Membership Provider
5.利用ASP.NET 2.0的Custom Oracle 和 SQL Server Profile Providers 做用戶狀態(tài)管理,包括購物車等
6.采用了Master Pages,取代了原來的用戶控件,來實(shí)現(xiàn)統(tǒng)一的界面效果
7.使用了ASP.NET 2.0 Wizard控件實(shí)現(xiàn)check-out
8.使用了SqlCacheDependency來實(shí)現(xiàn)數(shù)據(jù)庫層次的緩存更新(cache invalidation)功能
9.使用了消息隊列來實(shí)現(xiàn)異時訂單處理。
2.整體架構(gòu):
![]()
數(shù)據(jù)庫:(暫略)
項目列表:從整體可以看出,Pet Shop 4的項目體系已經(jīng)很龐大,考慮的方面也較3.0更全面復(fù)雜。
序號
|
項目名稱
|
描述
|
1
| BLL
| 業(yè)務(wù)邏輯層
|
2
| CacheDependencyFactory
| 緩存依賴類的工廠類
|
3
| WEB
| 表示層
|
4
| DALFactory
| 數(shù)據(jù)層的抽象工廠
|
5
| DBUtility
| 數(shù)據(jù)訪問類組件
|
6
| IBLLStrategy
| 同步/異步策略接口
|
7
| ICacheDependency
| 緩存依賴類接口
|
8
| IDAL
| 數(shù)據(jù)訪問層接口定義
|
9
| IMessaging
| 異時處理消息隊列接口定義
|
10
| IProfileDAL
| Profile的數(shù)據(jù)訪問層接口定義
|
11
| Membership
| Membership認(rèn)證和授權(quán)管理
|
12
| MessagingFactory
| 異時處理消息隊列的抽象工廠
|
13
| Model
| 業(yè)務(wù)實(shí)體
|
14
| MSMQMessaging
| 異時處理消息隊列的實(shí)現(xiàn)
|
15
| OracleDAL
| Oracle數(shù)據(jù)訪問層
|
16
| OracleProfileDAL
| Oracle的Profile Providers
做用戶狀態(tài)管理,包括購物車等
|
17
| OrderProcessor
| 后臺處理進(jìn)程,處理訂單隊列
|
18
| Profile
| Profile的數(shù)據(jù)訪問層
|
19
| ProfileDALFactory
| ProfileDAL的工廠類(反射創(chuàng)建ProfileDAL)
|
20
| SQLProfileDAL
| SQL Server 的Profile Providers
做用戶狀態(tài)管理,包括購物車等
|
21
| SQLServerDAL
| SQLServer數(shù)據(jù)訪問層
|
22
| TableCacheDependency
| 緩存依賴實(shí)現(xiàn)類
|
項目分解:
由于整體已經(jīng)有22個項目,所以,對于初學(xué)者一看就暈了,所以,我做了分解,可以大體上分幾塊去理解。
序號
|
項目名稱
|
描述
|
1
| WEB
| 表示層
|
2
| Model
| 業(yè)務(wù)實(shí)體
|
3
| BLL
| 業(yè)務(wù)邏輯層
|
4
| DALFactory
| 數(shù)據(jù)層的抽象工廠
|
5
| IDAL
| 數(shù)據(jù)訪問層接口定義
|
6
| SQLServerDAL
| SQLServer數(shù)據(jù)訪問層
|
7
| OracleDAL
| Oracle數(shù)據(jù)訪問層
|
8
| DBUtility
| 數(shù)據(jù)庫訪問組件基礎(chǔ)類
|
9
| CacheDependencyFactory
| 緩存依賴類的工廠類
|
10
| ICacheDependency
| 緩存依賴類接口
|
11
| TableCacheDependency
| 緩存依賴實(shí)現(xiàn)類
|
12
| IBLLStrategy
| 同步/異步處理策略接口(實(shí)現(xiàn)在bll根據(jù)配置反射選擇)
|
13
| MessagingFactory
| 異時處理消息隊列的抽象工廠
|
14
| IMessaging
| 異時處理消息隊列接口定義
|
15
| MSMQMessaging
| 異時處理消息隊列的實(shí)現(xiàn)
|
16
| Profile
| Profile的數(shù)據(jù)訪問層
|
17
| ProfileDALFactory
| ProfileDAL的工廠類(反射創(chuàng)建ProfileDAL)
|
18
| IProfileDAL
| Profile的數(shù)據(jù)訪問層接口定義
|
19
| OracleProfileDAL
| Oracle的Profile Providers
做用戶狀態(tài)管理
|
20
| SQLProfileDAL
| SQL Server 的Profile Providers
做用戶狀態(tài)管理
|
21
| Membership
| Membership認(rèn)證和授權(quán)管理
|
22
| OrderProcessor
| 后臺處理進(jìn)程,處理訂單隊列
|
![]()
3.Petshop 4中的設(shè)計模式:
工廠模式:
首當(dāng)其沖的就是工廠模式,很容易就可以看出來,也是應(yīng)用最多的。
DALFactory:數(shù)據(jù)訪問層的抽象工廠(決定創(chuàng)建哪種數(shù)據(jù)庫類型的數(shù)據(jù)訪問層?梢赃x擇:SQLServer,Oracle)
CacheDependencyFactory:緩存依賴類的工廠類。(創(chuàng)建具體表的緩存依賴)
MessagingFactory :異時處理消息隊列的抽象工廠(反射創(chuàng)建具體的異時處理類)
ProfileDALFactory:ProfileDAL的工廠類(反射選擇創(chuàng)建Oracle 和SQL Server的 ProfileDAL)
策略模式: IorderStrategy
![]()
中介模式
CategoryDataProxy ItemDataProxy
ProductDataProxy
![]()
暫時只看了這么多,以后有時間繼續(xù)分解,如果你有不同的見解或經(jīng)驗,也請寫下來,好讓大家來共同學(xué)習(xí),共同探討,共同進(jìn)步。
(作者:李天平
轉(zhuǎn)載請注明)
具體介紹可以參看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
下載:
http://download.microsoft.com/download/8/0/1/801ff297-aea6-46b9-8e11-810df5df1032/Microsoft%20.NET%20Pet%20Shop%204.0.msi |