三層架構理解

彭雅瑄發表於2020-10-13

三層架構就是為了符合“高內聚,低耦合”思想,把各個功能模組劃分為表示層(UI)、業務邏輯層(BLL)和資料訪問層(DAL)三層架構,各層之間採用介面相互訪問,並通過物件模型的實體類(Model)作為資料傳遞的載體,不同的物件模型的實體類一般對應於資料庫的不同表,實體類的屬性與資料庫表的欄位名一致。 [1] 

三層架構區分層次的目的是為了 “高內聚,低耦合”。開發人員分工更明確,將精力更專注於應用系統核心業務邏輯的分析、設計和開發,加快專案的進度,提高了開發效率,有利於專案的更新和維護工作。 [2] 

中文名

三層架構 [3] 

外文名

3-tier architecture [3] 

分    類

表示層(UI)、業務邏輯層(BLL)和資料訪問層(DAL) [1] 

目    的

“高內聚,低耦合”的思想 [2] 

優    點

降低層與層之間的依賴 標準化 [1] 

應    用

應用伺服器、應用客戶端等 [1] 

 

含義

編輯

三層架構主要是指將業務應用規劃中的表示層 UI、資料訪問層 DAL 以及業務邏輯層 BLL,其分層的核心任務是“高內聚低耦合”的實現。在整個軟體架構中,分層結構是常見和普通的軟體結構框架,同時也具有非常重要的地位和意義。這種三層架構可以在軟體開發的過程中,劃分技術人員和開發人員的具體開發工作,重視核心業務系統的分析、設計以及開發,提高資訊系統開發質量和開發效率,進而為資訊系統日後的更新與維護提供很大的方便。 [4] 

三層架構分層方式

編輯

怎麼樣分層符合三層架構原則呢?主要有以下三種分層方式: [3] 

1、資料層不包含任何程式碼,只有資料庫,還有相關的儲存過程。這種模式下,資料層看起來就變得很簡單了。只包含所建立的資料庫和一些儲存過程(注意是儲存過程)。其實這些儲存過程的建立也是相當複雜的,因為它們可以完成除資料訪問外的其他一些很強大的功能,如分頁、實現搜尋演算法等。資料訪問的邏輯就都放在業務層,當然業務層還包含其他一些邏輯程式碼。我們來看一個示例,假設資料庫裡有一個表 BOOKS(書),建立一個儲存過程 GetAllBooks,用來讀取書的資訊,這樣在業務層裡編一個方法 GetBookS()和一個公用資料庫訪問類,GetBooks()就通過資料庫訪問類開啟連線,執行在儲存過程,返回資料 (返回型別可以是 DataT - able,DataSet,DataReader 或 者 實 體 類)。業務層單獨編譯成一個或者幾個 DLL 檔案。接著就是表示層了,表示層通過呼叫GetBookS()返回資料繫結在相關的控制元件裡。業務層的方法都是在表示層呼叫。一般來說 book.aspx 和 book.aspx.cs 都是表示層的內容,所有前臺的設計、相關控制元件、資料快取都是屬於表示層。 [3] 

2、資料層還包含所有公共資料訪問程式碼。這種模式和前一種差別不大,主要是把資料訪問程式碼留到資料層。這樣可以很方便地實現對多資料庫的支援。業務邏輯層直接呼叫資料層的相關訪問資料的程式碼,完全不必瞭解底層是什麼資料庫。其他和前一種沒什麼分別。 [3] 

3、所有資料讀取都放在資料層。這種模式下像前面所述的 GetBooks()方法都是放在資料層,在業務層再定義一個GetBookS()方法以供表示層呼叫。這種模式下業務層不但不必瞭解底層是什麼資料庫,而且連資料庫的結構都不必瞭解了,這是最標準的三層架構了,在 Microsoft 的 PetShop 4.0 裡就是這種模式。 [3] 

結構體系

編輯

三層架構的體系結構:表示層和業務邏輯層之間用物件模型的實體類物件來傳遞資料,業務邏輯層和資料訪問層之間用物件模型的實體類物件來傳遞資料,資料訪問層通過.NET 提供的 ADO.NET 元件來運算元據庫,或者利用 SQLServer 資料庫伺服器的儲存過程來完成資料操作,三層架構的體系結構如右圖所示。 [1] 

這種分層體系結構具有以下四個優點: [1] 

(1)避免了表示層直接訪問資料訪問層,表示層只和業務邏輯層有聯絡,提高了資料安全性。 [1] 

(2)有利於系統的分散開發,每一個層可以由不同的人員來開發,只要遵循介面標準,利用相同的物件模型實體類就可以了,這樣就可以大大提高系統的開發速度。 [1] 

(3)方便系統的移植,如果要把一個 C/S 的系統變成 B/S 系統,只要修改三層架構的表示層就可以了,業務邏輯層和資料訪問層幾乎不用修改就可以輕鬆的把系統移植到網路上。 [1] 

(4)專案結構更清楚,分工更明確,有利於後期的維護和升級。 [1] 

各部分含義及原理

編輯

開發原理

三層架構中主要功能與業務邏輯一般要在業務邏輯層進行資訊處理和實現,其中三層體系架構中的客戶端和資料庫要預設中間層,成為組建層。三層架構中的三層具有一定的邏輯性,即是將三層設定到同一個計算機系統中,把業務協議、合法校驗以及資料訪問等程式歸置到中間層進行資訊處理,一般客戶端無法和資料庫進行資料傳輸,主要是利用 COM/DCOM 通訊和中間層構建銜接通道,實現中間層與資料庫的資料傳輸,進而實現客戶端與是資料庫的互動。 [4] 

表示層

表示層又稱表現層 UI,位於三層構架的最上層,與使用者直接接觸,主要是 B/S 資訊系統中的 Wed 瀏覽頁面。作為 Wed 瀏覽頁面,表示層的主要功能是實現系統資料的傳入與輸出,在此過程中不需要藉助邏輯判斷操作就可以將資料傳送到 BBL 系統中進行資料處理,處理後會將處理結果反饋到表示層中。換句話說,表示層就是實現使用者介面功能,將使用者的需求傳達和反饋,並用 BLL 或者是 Models 進行除錯,保證使用者體驗。 [4] 

業務邏輯層

業務邏輯層 BLL 的功能是對具體問題進行邏輯判斷與執行操作,接收到表現層 UI 的使用者指令後,會連線資料訪問層 DAL,訪問層在三層構架中位於表示層與資料層中間位置,同時也是表示層與資料層的橋樑,實現三層之間的資料連線和指令傳達,可以對接收資料進行邏輯處理,實現資料的修改、獲取、刪除等功能,並將處理結果反饋到表示層 UI 中,實現軟體功能。 [4] 

資料訪問層

資料訪問層 DAL 是資料庫的主要操控系統,實現資料的增加、刪除、修改、查詢等操作,並將操作結果反饋到業務邏輯層 BBL。在實際執行的過程中,資料訪問層沒有邏輯判斷能力,為了實現程式碼編寫的嚴謹性,提高程式碼閱讀程度,一般軟體開發人員會在該層中編寫 Data AccessCommon,保證資料訪問層 DAL 資料處理功能。 [4] 

實體類庫

實體類庫是資料庫表的對映物件,在資訊系統軟體實際開發的過程中,要建立物件例項,將關聯式資料庫表採用物件實體化的方式表現出來,輔助軟體開發中對各個系統功能的控制與操作執行,並利用 GET 與 SET 把資料庫表中的所有欄位對映為系統物件,建立實體類庫,進而實現各個結構層的引數傳輸,提高程式碼的閱讀性。從本質上看,實體類庫主要服務於表示層、業務邏輯層以及資料訪問層,在三層之間進行資料引數傳輸,強化資料表示的簡約性。 [4] 

優點

編輯

  1. 高內聚、低耦合,可以降低層與層之間的依賴。 [2] 

  2. 各層互相獨立,完成自己該完成的任務,專案可以多人同時開發,開發人員可以只關注整個結構中的其中某一層。 [2] 

  3. 容易移植、維護,如 B / S 轉 C / S、SQLServer 轉 Oracle、新增、修改、刪除等。 [2] 

  4. 有利於標準化。 [2] 

  5. 有利於各層邏輯的複用。 [2] 

  6. 安全性高。使用者端只能通過業務邏輯層來呼叫資料訪問層,減少了入口點,把很多危險的系統功能都遮蔽了。 [2] 

應用

編輯

應用伺服器

伺服器一般包括有連線與無連線形式,無連線在最底層要設定UDP/IP協議實現伺服器通訊功能,同時在實際

三層架構三層架構

使用的過程中,由於客戶機無法保證可靠的傳輸渠道,使得客戶機向伺服器提交請求時,很容易造成請求的丟失、延遲以及傳遞失序等傳輸問題,進而降低通訊質量。UDP的可靠性很低,在實際執行中UDP要依託於下層IP網路進行交付分組,無法引入檢驗程式,而IP網路還要由實際硬體網路或者是相關閘道器決定其工作質量。因此,從這一層面上看,下層網路的好壞直接關係到UDP工作。在進行開發有連線伺服器的過程中,要利用TCP/IP通訊協議,利用網際網路建立良好的通訊環境,進而提高通訊資料的真實性和可靠性。TCP/IP通訊協議可以對資料資訊進行驗證與校對,保證資料資訊的完整性。同時在實際執行中,可以通過資料的序列號排序保證資料資訊的有序到達,防止出現資訊重複分組的情況。另外,這種通訊協議可以對流量進行有效控制,確保傳送資訊速度在接收方的承受範圍以內,通過INTERNET,實現伺服器的面向連線。 [4] 

應用客戶端

在三層構架系統中,客戶端是使用者的主要功能體驗區域,相比於伺服器而言非常簡單。一方面,在三層構架執行的過程中,客戶機軟體要和各個伺服器進行相互通訊,不需要過於重視併發性處理。另一方面,一般客戶機軟體可以仿照常規程式進行指令執行,不需要進行外加保護,依託於作業系統進行強迫性保護。但與此同時對介面具有極高的要求,系統分析的過程中就要進行專門的介面設計,同時要和客戶進行及時溝通,掌握客戶的實際需求,實現高效的資訊反饋與交流溝通,進而保證資訊系統軟體介面設計的質量和效率。 [4] 

資料伺服器

在進行資料伺服器選擇的過程中,要根據資訊系統平臺要求和使用者期望要求,同時對應各個伺服器的特點進行使用與選擇。一般情況下出於對系統效能的考慮,會選擇SQLSERVER資料伺服器,設計階段中要通過Proactive等有效措施對系統資料庫的實際使用效能進行不斷地優化與完善。同時管理人員要和程式設計人員進行有效的溝通與協作,明確資訊系統軟體的效能目標,設定效能期望值,構建系統資源組合體系,滿足使用者的實際需求。 [4] 

資料庫和應用伺服器的連線

在基於三層構架的資訊系統開發中,應用伺服器要利用SQL語言進行連線資料庫伺服器,其連線方法包括DB-Library、DAO以及OLE等方式,其中DB-Library是最為常見的連線方式,作為SQLSERVER的重要介面層,具有極強的訪問資訊效率和訪問速度。這主要是源於DB-Library的語言開發能力,直接省去DAO以及OLE等連線方式中抽象層的呼叫,節省了資訊訪問時間。同時,三層構架適用於使用諸多開發語言的資訊系統開發,不是.NET的專利,也不是專門用在資料庫上的技術,而是一種更加普適的架構設計理念,除了資料、邏輯、介面等層次之外,在實際應用中還會根據需要多出傳遞資料的層、介面層等等。在結合DB-Library資料庫連線後,設定NTWDBLIB.LIB組建,構建CDBConn實體類庫體系,實現資料庫與應用伺服器的連線。因此,資訊系統軟體架構可以為系統開發創造出良好的分散式計算環境,其中邏輯層可以實現多個機器的同時執行,通過計算機網路計算能力,強化系統各個功能板塊的精準性和複用性,進而有效減少了資訊系統軟體開發的時間和週期,保證資訊系統的安全性與擴充性,實現系統功能的最大化實現。 [4]

相關文章