日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《解剖PetShop》系列之一(转)

發(fā)布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《解剖PetShop》系列之一(转) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言:PetShop是一個范例,微軟用它來展示.Net企業(yè)系統(tǒng)開發(fā)的能力。業(yè)界有許多.Net與J2EE之爭,許多數(shù)據(jù)是從微軟的PetShop和Sun的PetStore而來。這種爭論不可避免帶有濃厚的商業(yè)色彩,對于我們開發(fā)人員而言,沒有必要過多關(guān)注。然而PetShop隨著版本的不斷更新,至現(xiàn)在基于.Net 2.0的PetShop4.0為止,整個設(shè)計逐漸變得成熟而優(yōu)雅,卻又很多可以借鑒之處。PetShop是一個小型的項目,系統(tǒng)架構(gòu)與代碼都比較簡單,卻也凸現(xiàn)了許多頗有價值的設(shè)計與開發(fā)理念。本系列試圖對PetShop作一個全方位的解剖,依據(jù)的代碼是PetShop4.0,可以從鏈接http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/bdasamppet4.asp中獲得。

一、PetShop的系統(tǒng)架構(gòu)設(shè)計

在軟件體系架構(gòu)設(shè)計中,分層式結(jié)構(gòu)是最常見,也是最重要的一種結(jié)構(gòu)。微軟推薦的分層式結(jié)構(gòu)一般分為三層,從下至上分別為:數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層(又或成為領(lǐng)域?qū)?#xff09;、表示層,如圖所示:


圖一:三層的分層式結(jié)構(gòu)

數(shù)據(jù)訪問層:有時候也稱為是持久層,其功能主要是負責(zé)數(shù)據(jù)庫的訪問。簡單的說法就是實現(xiàn)對數(shù)據(jù)表的Select,Insert,Update,Delete的操作。如果要加入ORM的元素,那么就會包括對象和數(shù)據(jù)表之間的mapping,以及對象實體的持久化。在PetShop的數(shù)據(jù)訪問層中,并沒有使用ORM,從而導(dǎo)致了代碼量的增加,可以看作是整個設(shè)計實現(xiàn)中的一大敗筆。

業(yè)務(wù)邏輯層:是整個系統(tǒng)的核心,它與這個系統(tǒng)的業(yè)務(wù)(領(lǐng)域)有關(guān)。以PetShop為例,業(yè)務(wù)邏輯層的相關(guān)設(shè)計,均和網(wǎng)上寵物店特有的邏輯相關(guān),例如查詢寵物,下訂單,添加寵物到購物車等等。如果涉及到數(shù)據(jù)庫的訪問,則調(diào)用數(shù)據(jù)訪問層。

表示層:是系統(tǒng)的UI部分,負責(zé)使用者與整個系統(tǒng)的交互。在這一層中,理想的狀態(tài)是不應(yīng)包括系統(tǒng)的業(yè)務(wù)邏輯。表示層中的邏輯代碼,僅與界面元素有關(guān)。在PetShop中,是利用ASP.Net來設(shè)計的,因此包含了許多Web控件和相關(guān)邏輯。

分層式結(jié)構(gòu)究竟其優(yōu)勢何在?Martin Fowler在《Patterns of Enterprise Application Architecture》一書中給出了答案:
1、開發(fā)人員可以只關(guān)注整個結(jié)構(gòu)中的其中某一層;
2、可以很容易的用新的實現(xiàn)來替換原有層次的實現(xiàn);
3、可以降低層與層之間的依賴;
4、有利于標(biāo)準(zhǔn)化;
5、利于各層邏輯的復(fù)用。

概括來說,分層式設(shè)計可以達至如下目的:分散關(guān)注、松散耦合、邏輯復(fù)用、標(biāo)準(zhǔn)定義

一個好的分層式結(jié)構(gòu),可以使得開發(fā)人員的分工更加明確。一旦定義好各層次之間的接口,負責(zé)不同邏輯設(shè)計的開發(fā)人員就可以分散關(guān)注,齊頭并進。例如UI人員只需考慮用戶界面的體驗與操作,領(lǐng)域的設(shè)計人員可以僅關(guān)注業(yè)務(wù)邏輯的設(shè)計,而數(shù)據(jù)庫設(shè)計人員也不必為繁瑣的用戶交互而頭疼了。每個開發(fā)人員的任務(wù)得到了確認,開發(fā)進度就可以迅速的提高。

松散耦合的好處是顯而易見的。如果一個系統(tǒng)沒有分層,那么各自的邏輯都緊緊糾纏在一起,彼此間相互依賴,誰都是不可替換的。一旦發(fā)生改變,則牽一發(fā)而動全身,對項目的影響極為嚴(yán)重。降低層與層間的依賴性,既可以良好地保證未來的可擴展,在復(fù)用性上也是優(yōu)勢明顯。每個功能模塊一旦定義好統(tǒng)一的接口,就可以被各個模塊所調(diào)用,而不用為相同的功能進行重復(fù)地開發(fā)。

進行好的分層式結(jié)構(gòu)設(shè)計,標(biāo)準(zhǔn)也是必不可少的。只有在一定程度的標(biāo)準(zhǔn)化基礎(chǔ)上,這個系統(tǒng)才是可擴展的,可替換的。而層與層之間的通信也必然保證了接口的標(biāo)準(zhǔn)化。

“金無足赤,人無完人”,分層式結(jié)構(gòu)也不可避免具有一些缺陷
1、降低了系統(tǒng)的性能。這是不言而喻的。如果不采用分層式結(jié)構(gòu),很多業(yè)務(wù)可以直接造訪數(shù)據(jù)庫,以此獲取相應(yīng)的數(shù)據(jù),如今卻必須通過中間層來完成。
2、有時會導(dǎo)致級聯(lián)的修改。這種修改尤其體現(xiàn)在自上而下的方向。如果在表示層中需要增加一個功能,為保證其設(shè)計符合分層式結(jié)構(gòu),可能需要在相應(yīng)的業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層中都增加相應(yīng)的代碼。
前面提到,PetShop的表示層是用ASP.Net設(shè)計的,也就是說,它應(yīng)是一個BS系統(tǒng)。在.Net中,標(biāo)準(zhǔn)的BS分層式結(jié)構(gòu)如下圖所示:


圖二:.Net中標(biāo)準(zhǔn)的BS分層式結(jié)構(gòu)

隨著PetShop版本的更新,其分層式結(jié)構(gòu)也在不斷的完善,例如PetShop2.0,就沒有采用標(biāo)準(zhǔn)的三層式結(jié)構(gòu),如圖三:


圖三:PetShop 2.0的體系架構(gòu)

從圖中我們可以看到,并沒有明顯的數(shù)據(jù)訪問層設(shè)計。這樣的設(shè)計雖然提高了數(shù)據(jù)訪問的性能,但也同時導(dǎo)致了業(yè)務(wù)邏輯層與數(shù)據(jù)訪問的職責(zé)混亂。一旦要求支持的數(shù)據(jù)庫發(fā)生變化,或者需要修改數(shù)據(jù)訪問的邏輯,由于沒有清晰的分層,會導(dǎo)致項目作大的修改。而隨著硬件系統(tǒng)性能的提高,以及充分利用緩存、異步處理等機制,分層式結(jié)構(gòu)所帶來的性能影響幾乎可以忽略不計。

PetShop3.0糾正了此前層次不明的問題,將數(shù)據(jù)訪問邏輯作為單獨的一層獨立出來:


圖四:PetShop 3.0的體系架構(gòu)

PetShop4.0基本上延續(xù)了3.0的結(jié)構(gòu),但在性能上作了一定的改進,引入了緩存和異步處理機制,同時又充分利用了ASP.Net 2.0的新功能MemberShip,因此PetShop4.0的系統(tǒng)架構(gòu)圖如下所示:


圖五:PetShop 4.0的體系架構(gòu)

比較3.0和4.0的系統(tǒng)架構(gòu)圖,其核心的內(nèi)容并沒有發(fā)生變化。在數(shù)據(jù)訪問層(DAL)中,仍然采用DAL Interface抽象出數(shù)據(jù)訪問邏輯,并以DAL Factory作為數(shù)據(jù)訪問層對象的工廠模塊。對于DAL Interface而言,分別有支持MS-SQL的SQL Server DAL和支持Oracle的Oracle DAL具體實現(xiàn)。而Model模塊則包含了數(shù)據(jù)實體對象。其詳細的模塊結(jié)構(gòu)圖如下所示:


圖六:數(shù)據(jù)訪問層的模塊結(jié)構(gòu)圖

可以看到,在數(shù)據(jù)訪問層中,完全采用了“面向接口編程”思想。抽象出來的IDAL模塊,脫離了與具體數(shù)據(jù)庫的依賴,從而使得整個數(shù)據(jù)訪問層利于數(shù)據(jù)庫遷移。DALFactory模塊專門管理DAL對象的創(chuàng)建,便于業(yè)務(wù)邏輯層訪問。SQLServerDAL和OracleDAL模塊均實現(xiàn)IDAL模塊的接口,其中包含的邏輯就是對數(shù)據(jù)庫的Select,Insert,Update和Delete操作。因為數(shù)據(jù)庫類型的不同,對數(shù)據(jù)庫的操作也有所不同,代碼也會因此有所區(qū)別。

此外,抽象出來的IDAL模塊,除了解除了向下的依賴之外,對于其上的業(yè)務(wù)邏輯層,同樣僅存在弱依賴關(guān)系,如下圖所示:


圖七:業(yè)務(wù)邏輯層的模塊結(jié)構(gòu)圖

圖七中BLL是業(yè)務(wù)邏輯層的核心模塊,它包含了整個系統(tǒng)的核心業(yè)務(wù)。在業(yè)務(wù)邏輯層中,不能直接訪問數(shù)據(jù)庫,而必須通過數(shù)據(jù)訪問層。注意圖中對數(shù)據(jù)訪問業(yè)務(wù)的調(diào)用,是通過接口模塊IDAL來完成的。既然與具體的數(shù)據(jù)訪問邏輯無關(guān),則層與層之間的關(guān)系就是松散耦合的。如果此時需要修改數(shù)據(jù)訪問層的具體實現(xiàn),只要不涉及到IDAL的接口定義,那么業(yè)務(wù)邏輯層就不會受到任何影響。畢竟,具體實現(xiàn)的SQLServerDAL和OracalDAL根本就與業(yè)務(wù)邏輯層沒有半點關(guān)系。

因為在PetShop 4.0中引入了異步處理機制。插入訂單的策略可以分為同步和異步,兩者的插入策略明顯不同,但對于調(diào)用者而言,插入訂單的接口是完全一樣的,所以PetShop 4.0中設(shè)計了IBLLStrategy模塊。雖然在IBLLStrategy模塊中,僅僅是簡單的IOrderStategy,但同時也給出了一個范例和信息,那就是在業(yè)務(wù)邏輯的處理中,如果存在業(yè)務(wù)操作的多樣化,或者是今后可能的變化,均應(yīng)利用抽象的原理。或者使用接口,或者使用抽象類,從而脫離對具體業(yè)務(wù)的依賴。不過在PetShop中,由于業(yè)務(wù)邏輯相對簡單,這種思想體現(xiàn)得不夠明顯。也正因為此,PetShop將核心的業(yè)務(wù)邏輯都放到了一個模塊BLL中,并沒有將具體的實現(xiàn)和抽象嚴(yán)格的按照模塊分開。所以表示層和業(yè)務(wù)邏輯層之間的調(diào)用關(guān)系,其耦合度相對較高:


圖八:表示層的模塊結(jié)構(gòu)圖

在圖五中,各個層次中還引入了輔助的模塊,如數(shù)據(jù)訪問層的Messaging模塊,是為異步插入訂單的功能提供,采用了MSMQ(Microsoft Messaging Queue)技術(shù)。而表示層的CacheDependency則提供緩存功能。這些特殊的模塊,我會在此后的文章中詳細介紹。

轉(zhuǎn)載于:https://www.cnblogs.com/aaa6818162/archive/2009/03/19/1416291.html

總結(jié)

以上是生活随笔為你收集整理的《解剖PetShop》系列之一(转)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲成人高清在线 | 超碰成人在线观看 | 一区二区三区在线不卡 | 国产我不卡| 亚洲熟妇丰满大屁股熟妇 | 日韩一区av在线 | 国产妇女馒头高清泬20p多 | 欧美成人a交片免费看 | 超碰超碰| 色婷婷网| 少妇真实被内射视频三四区 | 深夜精品 | 国产调教打屁股xxxx网站 | 狠狠狠狠干 | 婷婷开心激情网 | 婷婷国产视频 | 国产精品系列在线播放 | 粉嫩av一区二区三区四区五区 | av在线免费播放网址 | 五月天综合网 | 国产精品三级视频 | 天天操天天做 | 国产精选91 | 精品久久久久久亚洲精品 | 天天摸天天碰 | 黄色录像a级片 | 毛片a | 欧美欧美欧美欧美 | 日韩免费毛片 | 人妻巨大乳一二三区 | 欧美自拍在线 | 温柔少妇的高潮呻吟 | 亚洲熟女少妇一区 | 野花国产精品入口 | 中文字幕女优 | 无遮挡在线观看 | va视频在线观看 | 一区二区精品视频 | 日本道在线观看 | 少妇一级淫片免费放2 | 欧美日韩一级黄色片 | 国产精品ww | 这里只有久久精品 | 精品久久香蕉国产线看观看亚洲 | 综合av| 黄色二级毛片 | 97成人在线视频 | 亚洲蜜桃av | 午夜精品福利电影 | 亚洲成a人片在线 | 日韩在线资源 | 一级国产视频 | 久久婷婷五月综合色国产香蕉 | 丝袜 中出 制服 人妻 美腿 | 成人毛片基地 | 亚洲精品一区二区口爆 | 国产香蕉一区二区三区 | 国产激情精品 | 久久久网址 | 日本精品一区二区三区四区 | 色久月| www.av72| 国产精品自产拍在线观看 | 欧美经典一区二区三区 | 国产污视频 | 色屁屁ts人妖系列二区 | 制服丝袜中文字幕在线 | 欧美污视频| 国产精品一区二区三 | 欧美一区二区三区成人久久片 | 色偷偷资源网 | se欧美| 福利第一页 | 国产精品一区二区免费视频 | 天天干天天色天天射 | 欧美在线黄| 最好看的中文字幕 | 葵司一区二区 | 在线观看亚洲欧美 | 老公吃小头头视频免费观看 | 精品麻豆av| 在线观看麻豆 | 超碰伦理 | 亚洲精品入口 | 午夜天堂视频 | 日韩一级高清 | 一区二区免费在线 | 无码人妻aⅴ一区二区三区有奶水 | 成人69视频| 日本人与黑人做爰视频 | 巨乳中文字幕 | 免费黄色网址在线观看 | 91欧美国产| 久草久操 | 极品白嫩丰满美女无套 | 日韩天堂视频 | 成人在线欧美 | 国产性―交一乱―色―情人 | 日韩国产综合 |