三層已經看了好多遍了,結合資料和自己對他的理解來做一個小小的總結。
什麼是三層?:
顧名思義:分爲以下三層(如圖第一張):
UI層(界面層):主要是指與用戶交互的界面,用於接收用戶的請求然後通過一系列的處理然後返回給用戶相應的數據。
BLL層(業務處理層):是UI層和DAL層的橋樑,通過BLL層事項UI和DAL的業務邏輯。
DAL層(數據訪問層):與數據庫打交道,主要實現對數據的增刪改查,將存儲在數據庫中的數據提交給業務層,同時將業務層處理的數據保存到數據庫。(當然這些操作都是基於UI層的。用戶的需求反映給界面(UI),UI反映給BLL,BLL反映給DAL,DAL進行數據的操作,操作後再一一返回,直到將用戶所需數據反饋給用戶)。
但是在三層的運用過程中,還有一個必不可少的一層Entity(實體層)(如圖第二張)。
實體層不屬於三層中的任何一層,但是是必不可少的,不可替代的一層。其作用也是十分重要的:
- 1、實現面向對象思想中的"封裝";
- 2、貫穿於三層,在三層之間傳遞數據;(注:確切的說實體層貫穿於三層之間,來連接三層
- 3、每一層(UI—>BLL—>DAL)之間的數據傳遞(單向)是靠變量或實體作爲參數來傳遞的,這樣就構造了三層之間的聯繫,完成了功能的實現。
但是對於大量的數據來說,用變量做參數有些複雜,因爲參數量太多,容易搞混。比如:我要把員工信息傳遞到下層,信息包括:員工號、姓名、年齡、性別、工資....用變量做參數的話,那麼我們的方法中的參數就會很多,極有可能在使用時,將參數匹配搞混。這時候,如果用實體做參數,就會很方便,不用考慮參數匹配的問題,用到實體中哪個屬性拿來直接用就可以,很方便。這樣做也提高了效率。
爲什麼使用三層?
使用三層最主要的目的就是:解耦。三層各司其職,任何一層都不會影響到另外兩層。能夠給程序員帶來很小的麻煩。還有就是可以防止更改數據庫時對其他的代碼構成影響,總之最主要的功能就是:解耦!!
結合生活實例:
教育機構中有諮詢、老師和學管。
諮詢:只管招生,接待學生家長。
學管:負責給學生安排相應的老師。
老師:相應的老師對學生進行教學。
三種角色各司其職,誰也不影響誰,諮詢只管招生,不管分配學生跟哪個老師,更不管教學。學管給學生分配老師,不管怎麼教學和怎麼招生,老師只管教學,不管如何招生,如何分配。
解耦就相當於:(任何一個職責都不影響另一個)【教育機構還有其他的諮詢、學管和老師】
1)諮詢招不上學生,換諮詢,
2)學管幹的不好,換學管
3)老師教不好,換老師
三層的優勢和劣勢
優勢:
1)結構清晰,耦合度底 2)可維護性高,可擴展性高 3)利於開發任務同步進行,容易適應需求變化
劣勢:
1)降低了系統的性能。這是不言而喻的。如果不採用分層式結構,很多業務可以直接造訪數據庫,以此獲取相應的數據,如今卻必須通過中間層來完成。
2)有時會導致級聯的修改。這種修改尤其體現在自上而下的方向。如果在表示層中需要增加一個功能,爲保證其設計符合分層式結構,可能需要在相應的業務邏輯層和數據訪問層中都增加相應的代碼。
3)增加了開發成本
歡迎大佬們的斧正和補充!!!