學校放假了,剛回家的孩子就像個客人被父母招待著。在放假的前幾天裡,你盡管開口,想吃啥爸媽都會滿足你,不過好景可不長!在我家,廚房是老媽的地盤,買菜、做飯、洗碗刷鍋,一個人全包了。而在飯店吃飯呢,吃飯的人多了,顧客點的飯菜種類各不相同。前前後後,一個人忙乎,哪裡顧得過來,所以飯店就有了分工。前台服務員負責將顧客點的菜上報給廚師和;廚師根據上報的菜單做菜;采購員負責柴米油鹽醬醋茶。這樣,大家各司其職,井井有條。
我們在家中吃飯比較簡單,沒有具體的分工。飯店就是一個復雜龐大的系統了,需要合理規劃,分工明確。一個優秀的軟件系統首先要有一個好框架,好的架構能夠實現高內聚、松耦合,從而提高軟件的可擴展性、可復用性、可維護性以及靈活性。在軟件體系架構中,分層結構是最常見的,也是最重要的一種結構。微軟推薦的分層式結構一般分為三層,自上至下分別為:表示層、業務邏輯層、數據訪問層。下面請看一張圖,將飯店與三層式結構聯系在一起,將學習融入生活。
數據庫服務器。接下來,我們來具體認識這三層。
表現層(UI):采集用戶的輸入信息和操作,向用戶展現特定業務數據。通俗講就是用戶界面,即用戶在使用一個系統的時候他的所見所得。
業務邏輯層(BLL):針對具體問題的操作,也可以說是對數據層的操作,對數據業務邏輯處理。主要有三種方式:從UI中獲取用戶指令和數據,執行業務邏輯;從DAL中獲取數據,以供UI顯示;從UI中獲取用戶指令和數據,通過DAL寫入數據源。
數據訪問層(DAL):該層所做事務直接操作數據庫,針對數據的增添、刪除、修改、查找等。
還有一個實體層(類),它在這三層之間上躥下跳,借用晨陽博客中的比喻,這個實體層好比是信件,B層就是U層和D層之間傳遞信件的聯絡員,他是不知道信件的內容的。
在這三層中,DAL 只提供基本的數據訪問,UI只負責顯示和采集用戶操作,他們都不包含任何業務相關的邏輯處理。BLL負責處理業務邏輯,通過獲取UI傳來的操作指令,執行業務邏輯,在需要訪問數據源的時候交給DAL處理。處理完成後,返回必要的數據給UI。UI引用BLL,BLL引用DAL,由上到下可以引用,反過來行不通。這三層都可以引用實體層(類),但實體層不能去引用別的層。
使用三層的好處有很多,開發人員可以只關注整個結構中的某一層,有利於分工協作,降低層與層之間的依賴。當某一層需要更改時,不會影響到其它層,降低了維護成本和維護時間。不同的業務需求調用同一個數據表時,相同的代碼只需寫一次,有利於各層邏輯的復用和標准化,實現軟件系統的高內聚,松耦合。One coin has two sides。這樣做的弊端就是由於增加了中間層,不能直接訪問數據庫,從而降低了系統的性能。有時會導致級聯的修改,如果在表示層需要增加一個功能,為保證其設計符合分層式結構,可能需要在相應的業務邏輯層和數據訪問層中都增加相應的代碼。當然也增加了開發成本。在實際的軟件開發中,具體情況要具體分析,權衡好利弊。