層(layer)這個(gè)概念在計(jì)算機(jī)領(lǐng)域是非常了不得的一個(gè)概念。計(jì)算機(jī)本身就體現(xiàn)了一種層的概念:系統(tǒng)調(diào)用層、設(shè)備驅(qū)動(dòng)層、操作系統(tǒng)層、CPU指令集。每個(gè)層都負(fù)責(zé)自己的職責(zé)。網(wǎng)絡(luò)同樣也是層的概念,最聞名的OSI的七層協(xié)議。
層到了軟件領(lǐng)域也一樣好用。為什么呢?我們看看使用層技術(shù)有什么好處:
● 你使用層,但是不需要去了解層的實(shí)現(xiàn)細(xì)節(jié)。
● 可以使用另一種技術(shù)來改變基礎(chǔ)的層,而不會(huì)影響上面的層的應(yīng)用。
● 可以減少不同層之間的依靠。
● 輕易制定出層標(biāo)準(zhǔn)。
● 底下的層可以用來建立頂上的層的多項(xiàng)服務(wù)。 當(dāng)然,層也有弱點(diǎn):
● 層不可能封裝所有的功能,一旦有功能變動(dòng),勢必要波及所有的層。
● 效率降低。
當(dāng)然,層最難的一個(gè)問題還是各個(gè)層都有些什么,以及要承擔(dān)何種責(zé)任。
典型的三層結(jié)構(gòu)
三層結(jié)構(gòu)估計(jì)大家都很熟悉了。就是表示(PResentation)層, 領(lǐng)域(domain)層, 以及基礎(chǔ)架構(gòu)(infrastrUCture)層。
表示層邏輯主要處理用戶和軟件的交互?,F(xiàn)在最流行的莫過于視窗圖形界面(wimp)和基于Html的界面了。表示層的主要職責(zé)就是為用戶提供信息,以及把用戶的指令翻譯。傳送給業(yè)務(wù)層和基礎(chǔ)架構(gòu)層。 基礎(chǔ)架構(gòu)層邏輯包括處理和其他系統(tǒng)的通信,代表系統(tǒng)執(zhí)行任務(wù)。例如數(shù)據(jù)庫系統(tǒng)交互,和其他應(yīng)用系統(tǒng)的交互等。大多數(shù)的信息系統(tǒng),這個(gè)層的最大的邏輯就是存儲(chǔ)持久數(shù)據(jù)。
還有一個(gè)就是領(lǐng)域?qū)舆壿?,有時(shí)也被叫做業(yè)務(wù)邏輯。它包括輸入和存儲(chǔ)數(shù)據(jù)的計(jì)算。驗(yàn)證表示層來的數(shù)據(jù),根據(jù)表示層的指令指派一個(gè)基礎(chǔ)架構(gòu)層邏輯。
領(lǐng)域邏輯中,人們總是搞不清楚什么事領(lǐng)域邏輯,什么是其它邏輯。例如,一個(gè)銷售系統(tǒng)中有這樣一個(gè)邏輯:假如本月銷售量比上個(gè)月增長10%,就要用紅色標(biāo)記。要實(shí)現(xiàn)這個(gè)功能,你可能會(huì)把邏輯放在表示層中,比較兩個(gè)月的數(shù)字,假如超出10%,就標(biāo)記為紅色。
這樣做,你就把領(lǐng)域邏輯放到了表示層中了。要分離這兩個(gè)層,你應(yīng)該現(xiàn)在領(lǐng)域?qū)又刑峁┮粋€(gè)方法,用來比較銷售數(shù)字的增長。這個(gè)方法比較兩個(gè)月的數(shù)字,并返回boolean類型。表示層則簡單的調(diào)用該方法,假如返回true,則標(biāo)記為紅色。
例子
層技術(shù)不存在說永恒的技巧。如何使用都要看具體的情況才能夠決定,下面我就列出了三個(gè)例子:
例子1:一個(gè)電子商務(wù)系統(tǒng)。要求能夠同時(shí)處理大量用戶的請求,用戶的范圍遍及全球,而且數(shù)字還在不斷增長。但是領(lǐng)域邏輯很簡單,無非是訂單的處理,以及和庫存系統(tǒng)的連接部分。這就要求我們1、表示層要友好,能夠適應(yīng)最廣泛的用戶,因此采用html技術(shù);2、支持分布式的處理,以勝任同時(shí)幾千的訪問;3、考慮未來的升級。
例子2:一個(gè)租借系統(tǒng)。系統(tǒng)的用戶少的多,但是領(lǐng)域邏輯很復(fù)雜。這就要求我們制作一個(gè)領(lǐng)域邏輯非常復(fù)雜的系統(tǒng),另外,還要給他們的用戶提供一個(gè)方便的輸入界面。這樣,wimp是一個(gè)不錯(cuò)的選擇。
例子3:簡單的系統(tǒng)。非常簡單,用戶少、邏輯少。但是也不是沒有問題,簡單意味著要快速交付,并且還要充分考慮日后的升級。因?yàn)樾枨笤诓粩嗟脑黾又小?/P>
何時(shí)分層
這樣的三個(gè)例子,就要求我們不能夠一概而論的解決問題,而是應(yīng)該針對問題的具體情況制定具體的解決方法。這三個(gè)例子比較典型。
第二個(gè)例子中,可能需要嚴(yán)格的分成三個(gè)層次,而且可能還要加上另外的中介(mediating)層。例3則不需要,假如你要做的僅是查看數(shù)據(jù),那僅需要幾個(gè)server頁面來放置所有的邏輯就可以了。
我一般會(huì)把表示層和領(lǐng)域?qū)?基礎(chǔ)架構(gòu)層分開。除非領(lǐng)域?qū)?基礎(chǔ)架構(gòu)層非常的簡單,而我又可以使用工具來輕易的綁定這些層。這種兩層架構(gòu)的最好的例子就是在VB、PB的環(huán)境中,很輕易就可以構(gòu)建出一個(gè)基于SQL數(shù)據(jù)庫的windows界面的系統(tǒng)。這樣的表示層和基礎(chǔ)架構(gòu)層非常的一致,但是一旦驗(yàn)證和計(jì)算變得復(fù)雜起來,這種方式就存在先天缺陷了。
很多時(shí)候,領(lǐng)域?qū)雍突A(chǔ)架構(gòu)層看起來非常類似,這時(shí)候,其實(shí)是可以把它們放在一起的??墒?,當(dāng)領(lǐng)域?qū)拥臉I(yè)務(wù)邏輯和基礎(chǔ)架構(gòu)層的組織方式開始不同的時(shí)候,你就需要分開二者。
更多的層模式
三層的架構(gòu)是最為通用的,尤其是對IS系統(tǒng)。其它的架構(gòu)也有,但是并不適用于任何情況。
第一種是Brown model [Brown et al]。它有五個(gè)層:表示層(Presentation),控制/中介層(Controller/Mediator),領(lǐng)域?qū)樱―omain), 數(shù)據(jù)映射層(Data Mapping), 和數(shù)據(jù)源層(Data Source)。它其實(shí)就是在三層架構(gòu)種增加了兩個(gè)中間層。控制/中介層位于表示層和領(lǐng)域?qū)又g,數(shù)據(jù)映射層位于領(lǐng)域?qū)雍突A(chǔ)架構(gòu)層之間。
表示層和領(lǐng)域?qū)拥闹薪閷?,我們通常稱之為表示-領(lǐng)域中介層,是一個(gè)常用的分層方法,通常針對一些非可視的控件。例如為特定的表示層組織信息格式,在不同的窗口間導(dǎo)航,處理交易邊界,提供Server的facade接口(具體實(shí)現(xiàn)原理見設(shè)計(jì)模式)。最大的危險(xiǎn)就是,一些領(lǐng)域邏輯被放到這個(gè)層里,影響到其它的表示層。
我經(jīng)常發(fā)現(xiàn)把行為分配給表示層是有好處的。這可以簡化問題。但表示層模型會(huì)比較復(fù)雜,所以,把這些行為放到非可視化的對象中,并提取出一個(gè)表示-領(lǐng)域中介層還是值得的。
Brown ISA
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注