三層架構的簡單理解

一、什麼是三層?

在軟件體系架構設計中,分層式結構是最常見,也是最重要的一種結構。三層結構從下至上分別為:數據訪問層、業務邏輯層(又或稱為領域層)、表示層。

具體應用——原則:

表示層(UI):主要是指與用戶交互的界面。用於接收用戶輸入的數據和顯示處理後用戶需要的數據。

業務邏輯層(BLL):UI層和DAL層之間的橋樑。實現業務邏輯。業務邏輯具體包含:判斷、驗證、計算、業務規則等等。

數據訪問層(DAL):

與數據庫打交道。主要實現對數據的增、刪、改、查。將存儲在數據庫中的數據提交給業務層,同時將業務層處理的數據保存到數據庫。(當然這些操作都是基於UI層的。用戶的需求反映給界面(UI),UI反映給BLL,BLL反映給DAL,DAL進行數據的操作,操作後再一一返回,直到將用戶所需數據反饋給用戶)

各層的作用:

數據訪問層(DAL)的作用:

從數據源加載數據(select)

向數據源寫入數據(Insert/Update)

從數據源刪除數據(Delete)

顯示層(UI)的作用:

向用戶展現特定業務數據

採集用戶的輸入信息和操作

業務邏輯層(BLL)的作用:

從DAL中獲取數據,以供UI顯示用

從UI中獲取用戶指令和數據,執行業務邏輯

從UI獲取用戶指令和數據,通過DAL寫入數據源

各層之間的引用關係:

DAL所在程序集不引用BLL和UI;

BLL需要引用DAL;

UI直接引用BLL,可能會間接引用DAL

思想來源與生活:

米老師經常說,把學習與生活結合,把學習和生活聯繫,這樣的學習才叫會學習,會生活。我們舉個生活中的例子來理解三層:


三層架構的簡單理解

看,這不就是典型的三層結構嗎?

服務員:只管接待客人;

廚師:只管做客人點的菜;

採購員:只管按客人點菜的要求採購食材;

他們各負其職,服務員不用瞭解廚師如何做菜,不用瞭解採購員如何採購食材;廚師不用知道服務員接待了哪位客人,不用知道採購員如何採購食材;同樣,採購員不用知道服務員接待了哪位客人,不用知道廚師如何做菜。

二、為什麼要使用三層架構?與傳統的兩層有什麼區別?

簡單地說,是為了解耦!分層的第一目的就是解耦!

同樣拿上面飯店的例子來講:

服務員(UI層)服務態度不好——另找服務員;廚師(BLL層)辭職——招聘另一個廚師;採購員(DAL)辭職——招聘另一個採購員;

任何一層發生變化都不會影響到另外一層!!!

兩層:


三層架構的簡單理解

(“多層”放在一層,分工不明確耦合度高——當任何一個地方發生變化時,都需要重新開發整個系統。難以適應需求變化,可維護性低、可擴展性低)

三層:

三層架構的簡單理解

(層次清晰,分工明確,每層之間耦合度低——哪一層發生變化,只需更改該層,不需要更改整個系統。提高了效率,適應需求變化,可維護性高,可擴展性高)

注意:不是所有的情況都適合使用三層架構,那麼什麼情況下使用呢?

業務邏輯簡單;沒有真正的數據存儲層,也就不需要數據訪問層,這樣簡單的結構是不需要三層架構的。但是當業務複雜到一定程度之後,當數據存儲在相應的數據庫或者獨立的存儲介質時,既有業務邏輯層,又有數據訪問層時,把數據訪問脫離開業務邏輯,把業務邏輯脫離開UI,UI是需要呼叫業務訪問層,就可以實現與用戶的交互。

三、三層之間數據是怎麼傳遞的呢?

用戶的需求反映給界面(UI),UI反映給BLL,BLL反映給DAL,DAL進行數據的操作,操作後再一一返回,直到將用戶所需數據反饋給用戶。

三層架構的簡單理解

每一層都各負其責,那麼該如何將三層聯繫起來呢?

這時候就涉及到了實體層(Entity):它不屬於三層中的任何一層,但是它是必不可少的一層。

Entity在三層架構中的作用:

1,實現面向對象思想中的"封裝";

2,貫穿於三層,在三層之間傳遞數據;

(注:確切的說實體層貫穿於三層之間,來連接三層)

3,對於初學者來說,可以這樣理解:每張數據表對應一個實體,即每個數據表中的字段對應實體中的屬性

注:當然,事實上不是這樣。為什麼?

• 可能我們需要的實體在數據表對應的實體中並不存在;

• 我們完全可以將所有數據表中的所有字段都放在一個實體裡

4,每一層(UI—>BLL—>DAL)之間的數據傳遞(單向)是靠變量或實體作為參數來傳遞的,這樣就構造了三層之間的聯繫,完成了功能的實現。

但是對於大量的數據來說,用變量做參數有些複雜,因為參數量太多,容易搞混。比如:我要把員工信息傳遞到下層,信息包括:員工號、姓名、年齡、性別、工資....用變量做參數的話,那麼我們的方法中的參數就會很多,極有可能在使用時,將參數匹配搞混。這時候,如果用實體做參數,就會很方便,不用考慮參數匹配的問題,用到實體中哪個屬性拿來直接用就可以,很方便。這樣做也提高了效率。

(注:這裡為什麼說可以暫時理解為每個數據表對應一個實體??答:大家都知道,我們做系統的目的,是為用戶提供服務,用戶可不關心你的系統後臺是怎麼工作的,用戶只關心軟件是不是好用,界面是不是符合自己心意。用戶在界面上輕鬆的增、刪、改、查,那麼數據庫中也要有相應的增、刪、改、查,而增刪改查具體操作對象就是數據庫中的數據,說白了就是表中的字段。所以,將每個數據表作為一個實體類,實體類封裝的屬性對應到表中的字段,這樣的話,實體在貫穿於三層之間時,就可以實現增刪改查數據了)

四、三層架構的優缺點?

優點:

1.分層——降低了耦合,各層之間和依賴降低,容易適應需求變化

2.各層之間的結構和功能明確

3.增加了代碼的可複用性

4.使代碼更加符合開放封閉原則,提高了系統的可修護性、可拓展性

5.利於開發任務同步進行

缺點:

1、降低了系統的性能。這是不言而喻的。如果不採用分層式結構,很多業務可以直接造訪數據庫,以此獲取相應的數據,如今卻必須通過中間層來完成。

2、有時會導致級聯的修改。這種修改尤其體現在自上而下的方向。如果在表示層中需要增加一個功能,為保證其設計符合分層式結構,可能需要在相應的業務邏輯層和數據訪問層中都增加相應的代碼

3、增加了代碼量,增加了工作量,開發難度增大。

5.三層登錄實例

現在有一個積分系統,學生每登錄一次可獲得10積分獎勵


分享到:


相關文章: