侯鵬
摘要:闡述什么事三層架構(gòu),通過日常生活中的實例對三層架構(gòu)做出較全面的解析
關(guān)鍵詞:三層架構(gòu);解耦
中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1009-3044(2015)31-0061-02
三層架構(gòu)在現(xiàn)在的中小型系統(tǒng)中有著普遍的應(yīng)用。關(guān)于三層架構(gòu)的問題有很多探討。對這個老問題,本文從新的角度去觀察、探析,使讀者從不同的方向去了解、認(rèn)識、應(yīng)用這個架構(gòu)。
1 三層架構(gòu)是什么
層次結(jié)構(gòu)在現(xiàn)實社會里隨處可見。公司人員結(jié)構(gòu)會分層,樓房是分層的,產(chǎn)品的生產(chǎn)過程是分層的,商品從生產(chǎn)到銷售的各個環(huán)節(jié)是分層的,雖然分層的目的各有不同,但是都是為解決某一問題而產(chǎn)生的。所以,分層架構(gòu)其實是為了解決某一問題而產(chǎn)生的一種解決方案。
那什么是三層體系結(jié)構(gòu)呢,三層架構(gòu)是在客戶端與數(shù)據(jù)庫之間加入了一個“中間層”,也叫業(yè)務(wù)邏輯層。這里所說的三層結(jié)構(gòu),不是指物理意義上的三層,不是簡單地放置幾臺機器就是三層體系結(jié)構(gòu),也不僅僅Web應(yīng)用才是三層體系結(jié)構(gòu),WinForm也同樣可以擁有三層架構(gòu),三層是指邏輯上的三層,即使在同一臺機器上也可能有三層架構(gòu)。
三層體系的應(yīng)用程序?qū)?shù)據(jù)訪問、業(yè)務(wù)邏輯、合法性校驗等工作放到了業(yè)務(wù)邏輯層進行處理。通常情況下,客戶端不直接與數(shù)據(jù)庫進行交互,而是通過業(yè)務(wù)邏輯層建立連接,再經(jīng)由業(yè)務(wù)邏輯層與數(shù)據(jù)庫進行交互。
1.1各層的作用
1)數(shù)據(jù)訪問層:主要是對原始數(shù)據(jù)的操作層,如數(shù)據(jù)庫數(shù)據(jù)、文本數(shù)據(jù)等,而不是指原始數(shù)據(jù)(如文件的具體內(nèi)容),也就是說,是對數(shù)據(jù)庫的操作,而不是數(shù)據(jù),具體為業(yè)務(wù)邏輯層或表示層提供數(shù)據(jù)服務(wù)。
2)業(yè)務(wù)邏輯層:主要是針對具體的問題的操作,如合法性校驗、權(quán)限控制等,也可以理解成對數(shù)據(jù)層的操作,對數(shù)據(jù)業(yè)務(wù)邏輯處理,從數(shù)據(jù)層拿來數(shù)據(jù),然后經(jīng)過轉(zhuǎn)換加工,在輸出給表現(xiàn)層,如果說數(shù)據(jù)層是積木,那邏輯層就是對這些積木的搭建。
3) 表現(xiàn)層:主要表示W(wǎng)EB方式,也有WINFORM方式,或者是App的方式,WEB方式可以表現(xiàn)成動態(tài)加載的頁面,如果邏輯層相當(dāng)強大和完善,表現(xiàn)層的表現(xiàn)形式應(yīng)該是可以隨意更換的,無論表現(xiàn)層如何定義和更改,只要業(yè)務(wù)邏輯沒有改變,邏輯層都應(yīng)該能完善地提供服務(wù)。
1.2什么樣的系統(tǒng)可以說是合理的三層
三層結(jié)構(gòu)的程序不是說把項目分成DAL、BLL、 UI三個模塊就叫三層了,三層程序必須符合以下條件:
1)最關(guān)鍵的,表現(xiàn)層(UI層)只能作為一個外殼,不能包含任何業(yè)務(wù)邏輯的處理過程
2) 設(shè)計時應(yīng)該從業(yè)務(wù)邏輯層(BLL)出發(fā),. 在BLL層上應(yīng)該實現(xiàn)所有業(yè)務(wù)邏輯。
3) 不管數(shù)據(jù)層是一些對數(shù)據(jù)庫的簡單操作也好,還是一個類也好,應(yīng)該在一定的抽象程度上做到系統(tǒng)無關(guān)
4) 不管使用Model類還是別的遠(yuǎn)程對象技術(shù),不管部署的時候是不是真的分別部署到不同的服務(wù)器上,最起碼在設(shè)計的時候要做這樣的考慮,更遠(yuǎn)的,還得考慮多臺服務(wù)器通過負(fù)載均衡作集群
所以考慮一個項目是不是應(yīng)該應(yīng)用三層/多層設(shè)計時,先得考慮下是不是真的需要? 實際上大部分程序就是不需要分層的,完全沒必要作的這么復(fù)雜. 而多層結(jié)構(gòu)是用于解決真正復(fù)雜的項目需求的。
1.3三層架構(gòu)的優(yōu)缺點
優(yōu)點:開發(fā)人員只需要關(guān)注自己開發(fā)的層;可以很容易的用新的實現(xiàn)來替換原有層次的實現(xiàn);可以降低層與層的依賴;有利于系統(tǒng)的標(biāo)準(zhǔn)化;利于各層邏輯的復(fù)用。結(jié)構(gòu)更加的清晰明確;在后期維護的時候,可以極大地降低維護成本和維護時間。
缺點:降低了系統(tǒng)的性能,如果用一層結(jié)構(gòu),UI直接訪問數(shù)據(jù),去掉了中間環(huán)節(jié),自然節(jié)約了運算時間,提高了系統(tǒng)性能。有時會導(dǎo)致級聯(lián)的修改,這種修改尤其體現(xiàn)在自上而下的方向。如果在表示層中需要增加一個功能,就必須在相應(yīng)的業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層增加對應(yīng)的代碼,以保證系統(tǒng)繼續(xù)符合設(shè)計的原則。增加了開發(fā)成本。
2生活中的三層架構(gòu)
我們應(yīng)該都去圖書館借過書。借書的過程看似簡單,其實就是三層結(jié)構(gòu)的日常應(yīng)用,如圖1。
圖1 三層機構(gòu)與借書
數(shù)據(jù)庫好比書庫,所有的書都按照分類號和編號,存放在不同的書架上。
Dal層好比取書員,把書從書庫中取出來,按照要求放在不同的窗口,交給不同的借書員,不關(guān)心書是借給哪個用戶的。
Bll層好比借書員,將書借給用戶,不用去關(guān)心書是從哪個書架來得。
Web層好比讀者,只需要從Bll層也就是借書員那里借走自己所需要的書,不必關(guān)心書從哪個取書員那里來得,更不必關(guān)心書在書庫哪個書架存放。
書好比 Model,無論是那層,各個環(huán)節(jié)傳遞的本質(zhì)都是書,書貫穿了整個借書的全過程。
當(dāng)然這個過程只是舉個例子,比如Bll的借書員層,可能存在書損壞了,對書的修補,或者對書的簡單包皮等細(xì)節(jié)工作。
以上通過日常生活中的借書,比較形象地介紹了三層架構(gòu)。那為什么不直接從數(shù)據(jù)庫取出內(nèi)容直接操作不可以嗎,為什么要這么麻煩的用三層架構(gòu)呢。這樣當(dāng)然也是可以的,比如說很小的一個資料室,只有一個管理員,這個管理員直接面對讀者,所有圖書工作都由一個人完成當(dāng)然是可以的,這就好比寫一個小的程序,一層完全能解決,就沒必要在分為多層處理。但是在大型圖書館,同時有很多讀者借書,這樣一個人是不可能完成所有事情,這個時候就需要分工,從而提高效率。當(dāng)我們處理大型項目時候,分層就是有必要的,讓各層各盡其職。所以分不分層需要根據(jù)實際情況而定,不能一概而論。
3 使用三層架構(gòu)的目的:解耦。
我們使用三層架構(gòu)的目的是解耦,同樣拿上面的例子來講:
讀者(UI層)是不斷變換的,我們不可能讓每個讀者直接去書庫里面自己找書,在大量圖書中,不懂編目的讀者根本找不到自己需要的書。
借書員(Bll層),借書員請假了,只要一個懂得借書操作的人員就可以頂替他的崗位,這個人員并不需要了解書庫書的排放。
取書員 (Dal層),取書員辭職了,這時候來一個新的取書員,我們只需要這個取書員了解書庫就可以了,并不需要他對借還書軟件進行熟悉。
這樣任何一層發(fā)生了變化,都不會影響到另外一層,即解耦。
4 三層架構(gòu)與兩層的區(qū)別
兩層架構(gòu):
(當(dāng)任何一個地方發(fā)生變化時,都需要重新開發(fā)整個系統(tǒng)?!岸鄬印狈旁谝粚樱止げ幻鞔_耦合度高——難以適應(yīng)需求變化,可維護性低、可擴展性低)
三層架構(gòu):
(發(fā)生在哪一層的變化,只需更改該層,不需要更改整個系統(tǒng)。層次清晰,分工明確,每層之間耦合度低——提高了效率,適應(yīng)需求變化,可維護性高,可擴展性高)
綜上上所述,三層架構(gòu)具有結(jié)構(gòu)清晰、耦合度低、可維護性高、可擴展性高、利于開發(fā)任務(wù)同步進行和容易適應(yīng)需求變化的優(yōu)勢。但是降低了系統(tǒng)的性能。如果不采取分層結(jié)構(gòu),很多業(yè)務(wù)可以直接方位數(shù)據(jù)庫來獲取相應(yīng)的數(shù)據(jù),而現(xiàn)在必須通過中間層來完成;所以我們在程序設(shè)計和開發(fā)的過程中,不能為了應(yīng)用三層結(jié)構(gòu)而去設(shè)計程序,而是應(yīng)該在需要用三層架構(gòu)或者多層架構(gòu)時候才用,用三層架構(gòu)的目的是為了使復(fù)雜問題簡單化,而不是簡單問題復(fù)雜化。多層的設(shè)計應(yīng)該是用來解決問題的,而不是制造麻煩的。
參考文獻:
[1] 談春燕.B/S三層架構(gòu)下單服務(wù)器集群技術(shù)的應(yīng)用[J].冶金自動化,2009(6).
[2] 博客園[EB/OL].http://www.cnblogs.com.
[3] Microsoft API 和參考目錄[EB/OL].http://msdn.microsoft.com/library.