三層架構(gòu)(3-tierarchitecture)通常意義上的三層架構(gòu)就是將整個(gè)業(yè)務(wù)應(yīng)用劃分為:界面層(UserInterfacelayer)、業(yè)務(wù)邏輯層(BusinessLogicLayer)、數(shù)據(jù)訪問層(Dataaccesslayer)。區(qū)分層次的目的即為了“高內(nèi)聚低耦合”的思想。在軟件體系架構(gòu)設(shè)計(jì)中,分層式結(jié)構(gòu)是最常見,也是最重要的一種結(jié)構(gòu)。微軟推薦的分層式結(jié)構(gòu)一般分為三層,從下至上分別為:數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層(又或稱為領(lǐng)域?qū)樱?、表示層?/span>
三層架構(gòu)的原理及作用_三層架構(gòu)怎么用----三層架構(gòu)原理
3個(gè)層次中,系統(tǒng)主要功能和業(yè)務(wù)邏輯都在業(yè)務(wù)邏輯層進(jìn)行處理。
所謂三層體系結(jié)構(gòu),是在客戶端與數(shù)據(jù)庫之間加入了一個(gè)“中間層”,也叫組件層。這里所說的三層體系,不是指物理上的三層,不是簡(jiǎn)單地放置三臺(tái)機(jī)器就是三層體系結(jié)構(gòu),也不僅僅有B/S應(yīng)用才是三層體系結(jié)構(gòu),三層是指邏輯上的三層,即把這三個(gè)層放置到一臺(tái)機(jī)器上。
三層體系的應(yīng)用程序?qū)I(yè)務(wù)規(guī)則、數(shù)據(jù)訪問、合法性校驗(yàn)等工作放到了中間層進(jìn)行處理。通常情況下,客戶端不直接與數(shù)據(jù)庫進(jìn)行交互,而是通過COM/DCOM通訊與中間層建立連接,再經(jīng)由中間層與數(shù)據(jù)庫進(jìn)行交互。
三層架構(gòu)的原理及作用_三層架構(gòu)怎么用----各層作用
1:數(shù)據(jù)訪問層:主要是對(duì)非原始數(shù)據(jù)(數(shù)據(jù)庫或者文本文件等存放數(shù)據(jù)的形式)的操作層,而不是指原始數(shù)據(jù),也就是說,是對(duì)數(shù)據(jù)庫的操作,而不是數(shù)據(jù),具體為業(yè)務(wù)邏輯層或表示層提供數(shù)據(jù)服務(wù)。
2:業(yè)務(wù)邏輯層:主要是針對(duì)具體的問題的操作,也可以理解成對(duì)數(shù)據(jù)層的操作,對(duì)數(shù)據(jù)業(yè)務(wù)邏輯處理,如果說數(shù)據(jù)層是積木,那邏輯層就是對(duì)這些積木的搭建。
3:界面層:主要表示W(wǎng)EB方式,也可以表示成WINFORM方式,WEB方式也可以表現(xiàn)成:aspx,如果邏輯層相當(dāng)強(qiáng)大和完善,無論表現(xiàn)層如何定義和更改,邏輯層都能完善地提供服務(wù)。
表示層的內(nèi)容就是來和用戶打交道,通俗講就是展現(xiàn)給用戶的界面,用戶的要求都體現(xiàn)在界面上。
三層架構(gòu)的原理及實(shí)現(xiàn)_三層架構(gòu)怎么用----各層之間的關(guān)系
業(yè)務(wù)邏輯層的功能主要是實(shí)現(xiàn)一些具體問題的操作,它是表示層和數(shù)據(jù)訪問層之間溝通的橋梁,主要負(fù)責(zé)數(shù)據(jù)的傳遞和處理。
數(shù)據(jù)訪問層的功能就是對(duì)數(shù)據(jù)庫中表的內(nèi)容的增刪改查。
三層的實(shí)現(xiàn)將我們的系統(tǒng)的實(shí)現(xiàn)過程分門別類,每一層自己做自己的事,互不影響,當(dāng)我需要其他層的內(nèi)容時(shí),再去調(diào)用。當(dāng)需要修改時(shí)只需改動(dòng)本層的內(nèi)容,不會(huì)影響到整個(gè)系統(tǒng)的代碼。
就是傳說中的解耦。讓那個(gè)每一層只關(guān)心自己內(nèi)部的事情,它只知道下層的存在,不知道上層的存在。達(dá)到局部改變而不影響全局的目的!
三層架構(gòu)的原理及作用_三層架構(gòu)怎么用----規(guī)則
三層結(jié)構(gòu)的程序不是說把項(xiàng)目分成DAL,BLL,WebUI三個(gè)模塊就叫三層了,下面幾個(gè)問題在你的項(xiàng)目里面:
⒈ UILayer里面只有少量(或者沒有)SQL語句或者存儲(chǔ)過程調(diào)用,并且這些語句保證不會(huì)修改數(shù)據(jù)?
⒉ 如果把UILayer拿掉,你的項(xiàng)目還能在Interface/API的層次上提供所有功能嗎?
⒊ 你的DAL可以移植到其他類似環(huán)境的項(xiàng)目嗎?
⒋ 三個(gè)模塊,可以分別運(yùn)行于不同的服務(wù)器嗎?
如果不是所有答案都為YES,那么你的項(xiàng)目還不能算是嚴(yán)格意義上的三層程序。 三層程序有一些需要約定遵守的規(guī)則:
⒈ 最關(guān)鍵的,UI層只能作為一個(gè)外殼,不能包含任何業(yè)務(wù)邏輯(BizLogic)的處理過程
⒉ 設(shè)計(jì)時(shí)應(yīng)該從BLL出發(fā),而不是UI出發(fā)。 BLL層在API上應(yīng)該實(shí)現(xiàn)所有BizLogic,以面向?qū)ο蟮姆绞?/p>
⒊ 不管數(shù)據(jù)層是一個(gè)簡(jiǎn)單的SqlHelper也好,還是帶有Mapping過的Classes也好,應(yīng)該在一定的抽象程度上做到系統(tǒng)無關(guān)
⒋ 不管使用COM+(Enterprise Service),還是Remoting,還是WebService之類的遠(yuǎn)程對(duì)象技術(shù),不管部署的時(shí)候是不是真的分別部署到不同的服務(wù)器上,最起碼在設(shè)計(jì)的時(shí)候要做這樣的考慮,更遠(yuǎn)的,還得考慮多臺(tái)服務(wù)器通過負(fù)載均衡作集群。
所以考慮一個(gè)項(xiàng)目是不是應(yīng)該應(yīng)用三層/多層設(shè)計(jì)時(shí),先得考慮下是不是真的需要? 實(shí)際上大部分程序就開個(gè)WebApplication就足夠了,完全沒必要作的這么復(fù)雜。 而多層結(jié)構(gòu),是用于解決真正復(fù)雜的項(xiàng)目需求的。
三層架構(gòu)的原理及作用_三層架構(gòu)怎么用----優(yōu)點(diǎn)
1、開發(fā)人員可以只關(guān)注整個(gè)結(jié)構(gòu)中的其中某一層;
2、可以很容易的用新的實(shí)現(xiàn)來替換原有層次的實(shí)現(xiàn);
3、可以降低層與層之間的依賴;
4、有利于標(biāo)準(zhǔn)化;
5、利于各層邏輯的復(fù)用。
三層架構(gòu)的原理及作用_三層架構(gòu)怎么用----缺點(diǎn)
1、降低了系統(tǒng)的性能。如果不采用分層式結(jié)構(gòu),很多業(yè)務(wù)可以直接造訪數(shù)據(jù)庫,以此獲取相應(yīng)的數(shù)據(jù),如今卻必須通過中間層來完成。
2、有時(shí)會(huì)導(dǎo)致級(jí)聯(lián)的修改。這種修改尤其體現(xiàn)在自上而下的方向。如果在表示層中需要增加一個(gè)功能,為保證其設(shè)計(jì)符合分層式結(jié)構(gòu),可能需要在相應(yīng)的業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層中都增加相應(yīng)的代碼。
3、增加了開發(fā)成本。
評(píng)論