最近學習了一下三層架構的知識,在網上搜集了一些資料,梳理了一下,以後備用,也希望能幫到其他熱愛編程的人!
分層的由來:
在學習網路的時候,書上有這麼一句話:任何新技術的出現都必須具備兩個條件:一是強烈的社會需求,二是前期技術的成熟!三層架構的出現,想必也順應了這句話。
1996年SUN公司推出了java,廣受業界的喜愛,其重要的一個原因就是java專門為企業開發提供了多層分布式公司專屬應用程式模型.在企業中,公司有明確的分工和部門,這些部門很可能不在同一個地區.每一個部門用到的系統一般是不同的.但是我們又希望每一個部門的資訊統一起來管理,便於管理層管理.同時,企業的資料對安全性要求一般是很高的.不希望系統每一個部分都部署在每一個員工的PC上.這樣顯然不是安全的.所以,我們解決的辦法就是把系統拆分開來,在J2EE中,應用邏輯按功能不同可以劃分為不同類型的組件,各組件根據它們所在的層分布在不同的機器上,共同組成一個基於組件的分布式系統。這樣,系統的安全性,可靠性大大的提高,充分發揮了分層的作用.自此,分層思想就推廣開來。
現在要談的三層體繫結構,是在用戶端與資料庫兩層之間加入了一個“中介層”,也叫組件層,三層體系的應用程式將商務規則、資料訪問、合法性校正等工作放到了中介層進行處理。這裡所說的三層體系,不是指物理上的三層,不是簡單地放置三台機器就是三層體繫結構,也不僅僅有B/S應用才是三層體繫結構,三層是指邏輯上的三層,即使這三個層放置到一台機器上。這三層分別被稱為:展示層(UI)、商務邏輯層(BLL)、資料訪問層(DAL)。通常情況下,用戶端不直接與資料庫進行互動,而是通過COM/DCOM通訊與中介層建立串連,再經由中介層與資料庫進行互動。下面具體闡述一下這三層:
基本的概念:
表現層(UI):通俗講就是展現給使用者的介面,即使用者在使用一個系統的時候他的所見所得。
商務邏輯層(BLL):針對具體問題的操作,也可以說是對資料層的操作,對資料商務邏輯處理。
資料訪問層(DAL):該層所等做事務直接操作資料庫,針對資料的增添、刪除、修改、尋找。
各層作用:
資料訪問層:主要是對未經處理資料(資料庫或者文字檔等存放資料的形式)的操作層,而不是指未經處理資料,也就是說,是對資料的操作,而不是資料庫,具體為商務邏輯層或展示層提供資料服務.
商務邏輯層:主要是針對具體的問題的操作,也可以理解成對資料層的操作,對資料商務邏輯處理,如果說資料層是積木,那邏輯層就是對這些積木的搭建。
展示層:主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表現成:aspx,如果邏輯層相當的強大和完善,無論表現層如何定義和更改,邏輯層都能完善地提供服務。
參考關聯性:
UI直接引用商務邏輯層(BLL)
商務邏輯層(BLL)需要引用資料訪問層(DAL)
資料訪問層(DAL)所在程式集不引用商務邏輯層(BLL)和展示層(UI)
說了這麼多的理論,有些抽象,下面用一個形象生動的例子闡述一下:
結合,把一個系統的運行,看作是一個飯點的運營,飯店將整個業務分解為三部分來完成,每一部分各負其責,服務員只管接待顧客、向廚師傳遞顧客的需求;廚師只管烹炒不同口味、不同特色的美食;後勤工作人員只管提供美食原料;他們三者分工合作共同為顧客提供滿意的服務。在飯店為顧客提供服務期間,服務員、廚師、後勤工作人員,三者中任何一者的人員發生變化時都不會影響其他倆者的正常工作,只對變化者進行重新調整即可正常營業。
我們用三層結構開發的軟體系統於此類似,展示層只提供軟體系統與使用者互動的介面;商務邏輯層是展示層和資料訪問層之間的橋樑,負責資料處理和傳遞;資料訪問層只負責資料的存取工作。
三層特點:
優點:
1.解耦。上一層只依賴於下一層,如果測試下一層沒有問題,那麼問題就只可能出現在本層了。便於發現和改正BUG。
2.簡化複雜問題。就比如tcp/ip協議的四層模型或OSI七層模型,各層分工明確,將一個複雜問題簡化了。
3.便於系統維護/升級。各層間通過介面解耦,介面與實現分離,從而可以非常方便的替換掉實現,或者升級實現等。
4.邏輯複用。例如原來基於B/S開發的程式現在要改成C/S,那麼只要業務層的介面沒有改變,那麼業務層和資料層都可以直接複用。在如,只要資料訪問層介面不變,那麼使用便可以有對不同資料庫的實現。
5.便於團隊開發。只要各層介面在開發前規定好,那麼各層可以獨立開發,進化或維護。
6.方便部署。將各層開發成組件,則可以獨立部署。
缺點:
分層過多限制了客戶對系統的理解能力。Tcp/ip便將OSI七層簡化為了4層。另外分層過多也增加了系統的理解難度,當然也看客戶的接受能力。雖然增大了靈活性,但同時也限制了客戶的理解和同客戶的交流。
我們什麼時候用三層呐?
如果一個程式,商務邏輯簡單,沒有真正的資料存放區層,就沒有必要抽象出一個商務邏輯層,當具有相當多的商務邏輯,業務複雜到一定程度,而且擁有資料存放區介質。我們就考慮使用三層架構了。