簡單介紹三層架構工作原理
前言
在閱讀本篇文章時請關註如下問題:
- 1.什麼是三層架構?
- 2.為什麼使用三層架構?
- 3.三層與以往使用的兩層相比有什麼不同?它的優勢在哪裡?
- 4.如何學好三層架構?如何應用三層架構?
一、什麼是三層架構
三層架構就是為瞭符合“高內聚,低耦合”思想,把各個功能模塊劃分為表示層(UI)、業務邏輯層(BLL)和 數據訪問層(DAL)三層架構,各層之間采用接口相互訪問,並通過對象模型的實體類(Model)作為數據傳遞的載體,不同的對象模型的實體類一般對應於數據庫的不同表,實體類的屬性與數據庫表的字段名一致。
各模塊功能劃分表:
UI:(表現層) | 主要是指與用戶交互的界面。用於接收用戶輸入的數據和顯示處理後用戶需要的數據。 |
BLL:(業務邏輯層) | UI層和DAL層之間的橋梁。實現業務邏輯。業務邏輯具體包含:驗證、計算、業務規則等等。 |
DAL:(數據訪問層) | 與數據庫打交道。主要實現對數據的增、刪、改、查。將存儲在數據庫中的數據提交給業務層,同時將業務層處理的數據保存到數據庫。(當然這些操作都是基於UI層的。用戶的需求反映給界面(UI),UI反映給BLL,BLL反應給DAL,DAL進行數據的操作,操作後再逐步返回,直到將用戶所需數據反饋給用戶) |
三層架構運作流程圖:
三層架構中各功能模塊如何聯系?
這裡就要提到Entity(實體層)
:它不屬於三層中的任何一層,但是它是必不可少的一層。對於大量的數據來說,用變量做參數有些復雜,因為參數量太多,容易搞混。比如:我要把員工信息傳遞到下層,信息包括:員工號、姓名、年齡、性別、工資…….用變量做參數的話,那麼我們的方法中的參數就會很多,極有可能在使用時,將參數匹配搞混。這時候,如果用實體做參數,就會很方便,不用考慮參數匹配的問題,用到實體中哪個屬性拿來直接用就可以,很方便。這樣做也提高瞭效率。
Entity在三層架構中的作用:
1.實現面向對象思想中的”封裝”; |
2.貫穿於三層,在三層之間傳遞數據;(註:確切的說實體層貫穿於三層之間,來連接三層) |
3.對於初學者來說,可以這樣理解: 每張數據表對應一個實體,即每個數據表中的字段對應實體中的屬性 (註:當然,事實上不是這樣。 為什麼? 1>)可能我們需要的實體在數據表對應的實體中並不存在 2>)我們完全可以將所有數據表中的所有字段都放在一個實體裡) |
4.每一層(UI—>BLL—>DAL)之間的數據傳遞(單向)是靠變量或實體作為參數來傳遞的,這樣就構造瞭三層之間的聯系,完成瞭功能的實現。 |
(補充:3.中為什麼說可以暫時理解為每個數據表對應一個實體??
我們做系統的目的,是為用戶提供服務,用戶可不關心你的系統後臺是怎麼工作的,用戶隻關心軟件是不是好用,界面是不是符合自己心意。用戶在界面上輕松的增、刪、改、查,那麼數據庫中也要有相應的增、刪、改、查,而增刪改查具體操作對象就是數據庫中的數據,說白瞭就是表中的字段。所以,將每個數據表作為一個實體類,實體類封裝的屬性對應到表中的字段,這樣的話,實體在貫穿於三層之間時,就可以實現增刪改查數據瞭)
三層及實體層之間的依賴關系:
二、為什麼使用三層架構
三層架構區分層次的目的是為瞭 “高內聚,低耦合”。開發人員分工更明確,將精力更專註於應用系統核心業務邏輯的分析、設計和開發,加快項目的進度,提高瞭開發效率,有利於項目的更新和維護工作。
三、三層與兩層的區別
兩層:
(當任何一個地方發生變化時,都需要重新開發整個系統。”多層”放在一層,分工不明確耦合度高——難以適應需求變化,可維護性低、可擴展性低)
三層:
(發生在哪一層的變化,隻需更改該層,不需要更改整個系統。層次清晰,分工明確,每層之間耦合度低——提高瞭效率,適應需求變化,可維護性高,可擴展性高)
三層架構的優勢:
1.結構清晰、耦合度低 |
2.可維護性高,可擴展性高 |
3.利於開發任務同步進行, 容易適應需求變化 |
三層架構的劣勢:
1.降低瞭系統的性能。這是不言而喻的。如果不采用分層式結構,很多業務可以直接造訪數據庫,以此獲取相應的數據,如今卻必須通過中間層來完成。 |
2.有時會導致級聯的修改。這種修改尤其體現在自上而下的方向。如果在表示層中需要增加一個功能,為保證其設計符合分層式結構,可能需要在相應的業務邏輯層和數據訪問層中都增加相應的代碼 |
3.增加瞭代碼量,增加瞭工作量 |
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Entity Framework系統架構與原理介紹
- SQL Server 數據庫的設計詳解
- 詳解Python 3D引擎Ursina如何繪制立體圖形
- 解決Spring Data Jpa 實體類自動創建數據庫表失敗問題
- Entity Framework管理一對二實體關系