目錄
目錄X

動易SiteFactory快報--系統(tǒng)架構(gòu)

今天要和大家說的是動易SiteFactory 的系統(tǒng)架構(gòu)設計。

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

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

數(shù)據(jù)訪問層:有時候也稱為是持久層,其功能主要是負責數(shù)據(jù)庫的訪問。簡單的說法就是實現(xiàn)對數(shù)據(jù)表的Select,Insert,Update,Delete的操作。如果要加入ORM的元素,那么就會包括對象和數(shù)據(jù)表之間的mapping,以及對象實體的持久化。

業(yè)務邏輯層:是整個系統(tǒng)的核心,它與這個系統(tǒng)的業(yè)務(領域)有關。如果涉及到數(shù)據(jù)庫的訪問,則調(diào)用數(shù)據(jù)訪問層。

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

分層式結(jié)構(gòu)究竟其優(yōu)勢何在?概括來說,分層式設計可以達至如下目的:分散關注、松散耦合、邏輯復用、標準定義。

1、分散關注:開發(fā)人員可以只關注整個結(jié)構(gòu)中的其中某一層;
2、松散耦合:可以很容易的用新的實現(xiàn)來替換原有層次的實現(xiàn);可以降低層與層之間的依賴;
3、邏輯復用:可以有利于各層邏輯的復用。比如,可以使用同一個業(yè)務邏輯來實現(xiàn)不同的表現(xiàn)層,針對不同的客戶端顯示不同的界面。比如針對電腦和手機編寫不同的界面,兩者共用相同的業(yè)務邏輯。
4、有利于標準化;

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

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

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

對于網(wǎng)站管理系統(tǒng)來說,采用分層式的設計,可以適應各種網(wǎng)站規(guī)模。網(wǎng)站的發(fā)展規(guī)模不斷發(fā)展變化,從一個個人網(wǎng)站發(fā)展成大型門戶網(wǎng)站,采用分層設計的系統(tǒng)自始至終都可以滿足功能需求和性能需求。在網(wǎng)站早期,使用分層設計的程序可能會有些浪費,并且?guī)硇阅苌系囊恍p失,但隨著網(wǎng)站的不斷發(fā)展,分層設計的程序可以不做任何修改或者只需少量修改即可滿足大型網(wǎng)站的要求。而沒有分層設計的程序,初期可能速度會較快,但網(wǎng)站一大,就不得不換程序,或者重新設計系統(tǒng)架構(gòu)。

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

 

在.Net中,標準的BS分層式結(jié)構(gòu)如下圖所示:

ps02.gif
圖二:.Net中標準的BS分層式結(jié)構(gòu)

動易CMS 2007遵循分層設計的思想,采用了三層設計的系統(tǒng)架構(gòu)。系統(tǒng)架構(gòu)圖如下所示:

ps05.gif
圖三:動易CMS 2007的體系架構(gòu)

熟悉企業(yè)應用開發(fā)的網(wǎng)友可能會發(fā)現(xiàn),動易CMS 2007的系統(tǒng)架構(gòu)圖與Petshop極為類似。是的,這是因為動易CMS 2007的系統(tǒng)架構(gòu)主要是參考微軟的企業(yè)級應用范例——Petshop4.0而設計的。

下面主要講一下數(shù)據(jù)訪問層(DAL)和業(yè)務邏輯層(BLL)的設計。

在數(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)圖如下所示:

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

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

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

ps07.gif
圖五:業(yè)務邏輯層的模塊結(jié)構(gòu)圖

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

動易SiteFactory 的業(yè)務層設計遵循這樣一個原則:在業(yè)務邏輯的處理中,如果存在業(yè)務操作的多樣化,或者是今后可能的變化,均應利用抽象的原理,或者使用接口,或者使用抽象類,從而脫離對具體業(yè)務的依賴。

動易SiteFactory 與Petshop的不同之處在于:Petshop只是一個簡單的應用范例,業(yè)務邏輯非常少,所以整個系統(tǒng)架構(gòu)中,將所有的業(yè)務邏輯存放于一個BLL的類庫中;而整個動易系統(tǒng)是由多個產(chǎn)品模塊的組合,所以實際上動易CMS 2007的每個產(chǎn)品是遵循三層設計,然后再由這些產(chǎn)品組合成整個系統(tǒng)。這一個問題,我會在下一篇文章中講到。

【打印正文】 發(fā)布時間:2006-10-12 15:34:13 瀏覽次數(shù): 作者:webboy 來源:本站原創(chuàng)
×

用戶登錄