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