三層結構的認識html
這幾天我在看三層的有關資料,對其有了一點的初步認識,如今對這一點點的認識作一下總結。數據庫
1、三層的劃分方式:物理上和邏輯上服務器
所謂的兩層或是三層結構,它又分爲物理上的劃分和邏輯上的劃分。架構
◆ 物理上的三層:顯示層/業務層/數據層app
物理上的劃分,能夠理解爲硬件上的劃分,由於咱們設計的程序架構都是跑在計算機上的,不管是跑在客戶機上、服務器上或者是終端機上的,終究它是跑在硬件上的。框架
在三層以前就有兩層結構或者是單層結構。設計
1)下面的圖1 是一張典型的CS「客戶機」端和「服務器」端的兩層物理結構圖。orm
「客戶機」端有用戶界面和應用邏輯,「服務器」端就是數據庫服務器。htm
客戶機是PC機或是智能機,對象
2)下面咱們再看一下三層的物理結構圖
物理上的三層:顯示層/業務層/數據層
顯示層,是PC機
業務層,是應用服務器。
數據層,數據庫服務器。
◆ 邏輯上的三層:UI/BLL+DAL/DB
注意:三層結構的物理劃分和邏輯上的劃分,能夠區分出:BLL和DAL都有可能跑在應用服務器上的,而不是數據庫服務器上。
在這裏咱們主要討論的三層是指邏輯的三層,是在數據庫之上討論的三層:UI、BLL、DAL。
2、三層的應用場景
咱們爲何要使用三層架構? 什麼狀況下不使用三層架構?
首先要清楚一點,並非全部的系統都須要使用三層架構的。
第一,業務邏輯簡單;第二,沒有真正的數據存儲層,因此也就不須要數據訪問層,這是就不須要使用三層架構。
只有業務邏輯複雜,既有數據訪問層,又有業務邏輯層(BLL層),才須要使用三層架構的。
3、三層的結構
(1)數據訪問層(DAL)
◆ DAL的做用
從數據源加載數據(Select)
向數據源寫入數據(Insert/Update)
從數據源刪除數據(Delete)
◆ DAL中經常使用的技術
ADO.NET+SQL語句
O/R Mapping框架 NHiberate(關係模型轉換爲對象模型)
訪問SQL Sever數據庫時Linq to SQL(它是單表映射)
因此說,DAL的職責:是與數據源打交道,讀數據、寫數據、刪數據.
(2)顯示層(UI層)
◆ UI的做用
向用戶展示特定業務數據
採集用戶的輸入信息和操做
◆ UI設計的原則
用戶至上,兼顧簡潔
◆中的經常使用技術
WindowsForm:Form 、Control
ASP.NET:aspx 、ascx 、master 、html
(3)業務邏輯層(BLL)
◆ BLL的做用
從DAL中獲取數據,以供UI層顯示用
從UI中獲取用戶指令和數據,執行業務邏輯
從UI中獲取用戶指令和數據,經過DAL寫入數據源。
◆ BLL的職責機制
UI→BLL→UI
UI→BLL→DAL→BLL→UI
總結:三層的關係
DAL只提供基本的數據訪問,不包含任何業務相關的邏輯處理。
UI只負責顯示和採集用戶操做,不包含任何的業務相關的邏輯處理。
BLL負責處理業務邏輯。經過獲取UI傳來的操做指令,決定執行業務邏輯,在須要訪問數據源的時候直接交給DAL處理,處理完成後,返回必要數據給UI.
DAL/BLL/UI分別在不一樣的程序集中
各個層之間的引用關係
UI→BLL→DAL
DAL所在程序集不引用BLL和UI
BLL須要引用DAL
UI直接引用BLL,可能會間接引用DAL。