一、什么是三層架構
(1)情景:
設想我們去餐廳吃飯,我們剛剛坐下來,就會有服務員過來為我們服務。服務員記下我們點的菜,然后將菜單傳給廚房的大廚。大廚拿出后勤人員事先買好准備好的菜開始烹制,然后交給服務員端出來讓我們享用。其實這個餐廳的飲食服務業務可以分解為三個部分來完成,每一部分各司其職。服務員只管接待顧客、向廚師傳遞顧客的需求;廚師只管烹炒不同口味、不同特色的美食;后勤工作人
員只管提供美食原料。他們三者分工合作共同為顧客提供滿意的服務。在餐廳里為顧客提供服務期間,服務員、廚師、后勤工作人員,三者中任何一個人員發生變化時(例如請假或辭職)都不會影響其他倆者的正常工作,只對變化者進行重新調整即可正常營業。
(2)我們軟件開發的三層架構與餐廳的服務流程類似。“三層架構”中的“三層”是指:表示層(User Interface Layer-UI) 、業務邏輯層(BussinessLogic Layer-BLL)、數據訪問層(Data Access Layer-DAL)。三層架構的結構可以用如下圖表示。
表示層:位於系統的最外層(最上層),離用戶最近。用於顯示數據和接收用戶輸入的數據,只提供軟件系統與用戶交互的界面。
業務邏輯層:位於表示層和數據訪問層之間,專門負責處理用戶輸入的信息,或者是將這些信息發送給數據訪問層進行保存,或者是通過數據訪問層從數據庫讀出這些數據。該層可以包括一些對”商業邏輯“描述的代碼在里面。業務邏輯層是表示層和數據訪問層之間的橋梁,負責數據處理和傳遞。
數據訪問層:僅實現對數據的保存和讀取操作。數據訪問包括訪問數據庫系統、二進制文件、文本文檔或是XML文檔。數據訪問層只負責對數據的訪問存取工作。
二、三層架構各層的職責分配
表示層(UI):只接收用戶輸入的數據,並將業務邏輯層處理數據的結果顯示給用戶。
業務邏輯層(DLL):只負責對數據的業務處理,開發人員不要在業務邏輯層里寫訪問數據庫的SQL語句。業務邏輯層可以驗證用戶輸入的數據、緩存從數據庫中讀取的數據等等。
數據訪問層(DAL):最好不要出現任何與業務邏輯和界面設計相關的代碼。也就是說,要保證數據訪問層中方法的功能僅負責存儲或讀取數據就可以了。
例如:
我們假設有一段登錄的代碼,則可以這樣處理程序:表示層負責接收用戶在界面輸入的用戶名和密碼的數據,然后傳給業務邏輯層。業務邏輯層對數據進行處理,給出用戶登錄正確判斷的邏輯,需要訪問數據庫的時候就向數據訪問發出訪問數據的請求(調用數據訪問層的函數)。數據訪問層訪問數據庫並獲得需要的數據,比如正確的登錄用戶名和密碼,然后返回給業務邏輯層。業務邏輯層把給數據和用戶輸入的登錄數據進行比較,如果比較的結果正確就將登錄用戶的詳細信息最終返回給表示層。若比較的結果不正確,則返回錯誤信息並由表示層顯示給用戶。
三、使用三層架構的目的
三層架構是將應用程序的業務規則、數據有效性校驗等工作放到了中間的業務邏輯層進行處理。通常情況下,客戶端不直接與數據庫進行交互,而是通過業務邏輯層與數據庫訪問層進行交換。開發人員可以將商業的業務邏輯放在中間層應用服務器上,把應用的業務邏輯與用戶界面分開。在保證客戶端功能的前提下,為用戶提供一個簡潔的界面。這樣一來如果需要修改應用程序代碼,只需要對中間層應用服務器進行修改,而不用修改成千上萬的客戶端應用程序。從而使開發人員可以專注於應用系統核心業務邏輯的分析、設計和開發,簡化了應用系統的
開發、更新和升級工作。
為了使軟件的系統結構更清楚,軟件開發工作分工更明確,有利於后期的維護和升級(只需要修改要修改的層,其實層可以復用)。盡管,它沒有提升軟件系統的性能,但從團隊開發效率角度上來講卻可以感受到大不相同的效果。需要說明一下,三層架構並不僅僅專門用在數據庫上,它是一種更加通用的軟件架構設計理念。
四、使用三層架構的優缺點
三層架構的優點是可以充分把軟件開發任務分解,有利於團隊合作開發。例如,表示層的開發人員只需關注用戶界面的設計和數據的輸入和顯示,他們不需要了解數據的存取和處理邏輯;業務邏輯層的開發人員則關注系統的數據處理邏輯,而不需要關心界面的設計、數據的存取和顯示;而數據訪問層的開發人員只需關注數據的存取操作,無需了解界面設計、數據的輸入、顯示和業務處理。這樣分層團隊開發更利於控制軟件質量,充分發揮版本控制和單元測試。三層構架的軟件適應性很強,一旦有什么需求變動可以很快的進行代碼更改,因而代碼的復用性很高。其中一層的代碼改變不影響其他層。例如,用戶界面的改變並不影響業務邏輯層和數據訪問層,甚至訪問不同數據庫管理系統也只改變數據訪問層的代碼而不會影響業務邏輯層和表示層的代碼。
三層架構的缺點就是代碼量太多,執行速度慢。三層架構開發模式不適用於對執行速度要求非常高的系統,例如:在線訂票,在線炒股等等。它比較擅長於商業規則經常變化的系統。
限於篇幅,將在下一博文中,指明三層架構的搭建的例子,歡迎大家一起來交流學習。