如何學習和理解三層架構
首先,學習任何知識都必須從基礎抓起。三層學習也是一樣,首先要了解基本的理論知識。
所謂三層體系結構,是在客戶端與數據庫之間加入了一個“中間層”,也叫組件層。這里所說的三層體系,不是指物理上的三層,不是簡單地放置三臺機器就是三層體系結構,也不僅僅有B/S應用才是三層體系結構,三層是指邏輯上的三層,即使這三個層放置到一臺機器上。
三層體系的應用程序將業務規則、數據訪問、合法性校驗等工作放到了中間層進行處理。通常情況下,客戶端不直接與數據庫進行交互,而是通過COM/DCOM通訊與中間層建立連接,再經由中間層與數據庫進行交互。
另外,在學習三層過程中可以看看MVC,將MVC和三層架構比較著理解,可以幫助大家更好的學習三層。
結構圖:
基本的概念:
1、表現層(UI):通俗講就是展現給用戶的界面,即用戶在使用一個系統的時候他的所見所得。
2、業務邏輯層(BLL):針對具體問題的操作,也可以說是對數據層的操作,對數據業務邏輯處理。
3、數據訪問層(DAL):該層所做事務直接操作數據庫,針對數據的增添、刪除、修改、查找等。
各層作用:
數據數據訪問層:主要是對原始數據(數據庫或者文本文件等存放數據的形式)的操作層,而不是指原始數據,也就是說,是對數據的操作,而不是數據庫,具體為業務邏輯層或表示層提供數據服務.
業務邏輯層:主要是針對具體的問題的操作,也可以理解成對數據層的操作,對數據業務邏輯處理,如果說數據層是積木,那邏輯層就是對這些積木的搭建。
表示層:主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表現成:aspx,如果邏輯層相當強大和完善,無論表現層如何定義和更改,邏輯層都能完善地提供服務。
三層的優缺點:
優點:
1、開發人員可以只關注整個結構中的其中某一層;
2、可以很容易的用新的實現來替換原有層次的實現;
3、可以降低層與層之間的依賴;
4、有利于標準化;
5、利于各層邏輯的復用。
缺點:
1、降低了系統的性能。這是不言而喻的。如果不采用分層式結構,很多業務可以直接造訪數據庫,以此獲取相應的數據,如今卻必須通過中間層來完成。
2、有時會導致級聯的修改。這種修改尤其體現在自上而下的方向。如果在表示層中需要增加一個功能,為保證其設計符合分層式結構,可能需要在相應的業務邏輯層和數據訪問層中都增加相應的代碼。
3、增加了開發成本。
規則:
1.系統各層次及層內部子層次之間都不得跨層調用。
2.Entityobject 在各個層之間傳遞數據。
3.需要在UI層綁定到列表的數據采用基于關系的DataSet傳遞,除此之外,應該使用Entityobject傳遞數據。
4.對于每一個數據庫表(Table)都有一個Entityclass與之對應,針對每一個Entity class都會有一個BEM Class與之對應。
5.在數量上,BEMClass比Entity class要多,這是因為有些跨數據庫或跨表的操作(如復雜的聯合查詢)也需要由相應的BEM Class來提供支持。
6.對于相對簡單的系統,可以考慮將Businessclass 子層和Business Flow 子層合并為一個。
7.UI層和BL層禁止出現任何SQL語句。
錯誤與異常:
異常可以分為系統異常(如網絡突然斷開)和業務異常(如用戶的輸入值超出最大范圍),業務異常必須被轉化為業務執行的結果。
1.D層不得向上層隱藏任何異常(該層拋出的異常幾乎都是系統異常)。
2.要明確區分業務執行的結果和系統異常。比如驗證用戶的合法性,如果對應的用戶ID不存在,不應該拋出異常,而是返回(或通過out參數)一個表示驗證 結果的枚舉值,這屬于業務執行的結果。但是,如果在從數據庫中提取用戶信息時,數據庫連接突然斷開,則應該拋出系統異常。
3.在有些情況下,B層應根據業務的需要捕獲某些系統異常,并將其轉化為業務執行的結果。比如,某個業務要求試探指定的數據庫是否可連接,這時B就需要將數據庫連接失敗的系統異常轉換為業務執行的結果。
4.UI層除了從調用BL層的API獲取的返回值來查看業務的執行結果外,還需要截獲所有的系統異常,并將其解釋為友好的錯誤信息呈現給用戶。
難以理解和應用的實體類:
我在學習三層過程中,遇到的最大的困惑就是關于實體類這部分內容的。當時,不知道該怎么樣去用它,不知道該這樣去設計和協調它。關于實體類的講解,網上也沒找到很好的講解過程。但是,我可以給大家推薦一個例子(http://download.csdn.net/detail/mazhaojuan/3981323) ,只要你仔細去研究這個例子,你就會很快明白,可以很快知道實體類到底該怎么用以及使用它的好處。這里給大家一個建議,一定要仔細找資料去學習三層的有關內容,不要上來就看這個例子。當你理解差不多之后,再去看,再去研究這個例子,那樣才會有效果。
看完這個例子之后,我大概畫了一張圖來理解它:
學習三層有一段時間了,雖然基本上理解了三層。但是,對于三層,還是要進一步深入學習的。它是整個軟件工程的一部分,是需要在實踐中去感悟和理解的。所以,三層的學習是融入在接下來的學習中,做工程的過程中,多思考。這樣才能將它學好,學透徹。
轉自:http://blog.csdn.net/lbq613613/article/details/7292648