一、概要
在我的上一篇部落格中,我們談了談分層,到底為什麼分層(http://blog.csdn.net/shan9liang/article/details/6836300)
這篇部落格,準備用一個小Demo來介紹應該實現三層架構。三層架構只是分層的一種經典形式,到底分幾層,要依具體情況而定,考慮到系統的複雜程度,和後期的可維護性,完全可以分四層,五層,甚至六層,七層。
三層架構(3-tierapplication),通常意義上的三層架構就是將整個業務應用劃分為:表現層(UI)、商務邏輯層(BLL)、資料訪問層(DAL)。區分層次的目的即為了“高內聚,低耦合”的思想(《百度百科》)
二、DEMO
1、實現語言:VB.NET
2、需求:《學校機房收費系統》中的一個功能:操作員為學生註冊機房上機卡。
3、使用案例圖:
4、三層架構下的包圖:
註:Entity中放的都是實體類,即由資料庫中的表抽象出來的類。實體類主要作為資料的載體,在各個層之間被傳遞。
我們現在要做的就是對使用案例圖中所示的這個功能進行抽象,即分別在UI,BLL,DAL三層抽象類別。
資料訪問層DAL:資料庫中的一張表對應DAL層的一個類,所以這裡要有一個dal_DealStudentInfo類,它必然有一個方法AddRecord,用於向資料庫中添加資料。這個方法的參數便是studentInfo這張表映射出的一個實體類的一個執行個體,方法中包含了一些SQL語句。IsExist是驗證資料有效性,這裡主要是檢驗使用者是否已經存在。圖示:
關鍵代碼如下:
Public Class dal_DealStudentInfo Public Function AddRecord(ByVal RecInfo As Student) As Boolean '…… '串連資料庫 '…… '…… Try 'SQL語句向資料庫中寫入資料 '…… Return True Catch Return False Finally '關閉資料庫 End Try End Function Public Function IsExist() As Boolean '查詢資料庫,如果存在該卡,則返回True,不存在則返回false If '存在 Return True Else Return False End If End FunctionEnd Class
商務邏輯層BLL:這裡會有一個類bll_ControlStudent與DAL層中的dal_DealStudentInfo類對應,調用dal_DealStudentInfo的AddRecord方法,這個方法傳遞的參數就是UI層傳遞過來的studentInfo實體類的一個執行個體。如果需要驗證輸入合法性,也放在bll_ControlStudent中,並與dal_DealStudentInfo中的方法相對應,可以單獨用一個方法,也可以整合到AddStudent中,我這裡因為只是進行了簡單的判斷,就把它放到了AddStudent。
圖示:
關鍵代碼如下:
Public Class bll_ControlStudent Public Function AddStudent(ByVal student As Student) As String Dim DealStudent As New dal_DealStudentInfo If Not (DealStudent.IsExist) Then If DealStudent.AddRecord(student) Then Return "註冊成功" Else Return "註冊失敗" End If Else Return "該卡已經存在,請重新輸入卡號" End If End FunctionEnd Class
表現層UI:這裡肯定有一個表單類frmRegister。上面有一些控制項,這裡我簡要畫了一個介面:
在按鈕確定的事件下,我們需要執行個體化studentInfo這張表映射出的一個實體類,把這個對象作為一個參數,傳遞給BLL層中的類bll_ControlStudent。
關鍵代碼:
Public Class frmRegister Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click Dim strMsg As String Dim student As New Student(Trim(txtCardNo.Text), Trim(txtStuName.Text), Trim(txtStuNo.Text), Trim(txtDepartment.Text), Val(txtMoney.Text)) Dim ControlStudent As New bll_ControlStudent strMsg = ControlStudent.AddStudent(student) MessageBox.Show(strMsg) End Sub Private Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCancel.Click Me.Close() End SubEnd Class
4、總體的關係類圖:
五、總結
本文主要通過一個小demo簡要實現了三層架構,我們看到三層架構的主要特點:UI調用BLL中類的方法,即UI知道BLL的方法,但不知道方法實現的細節,而BLL層並不知道UI的存在.同樣BLL層調用DAL,而DAL也不知道BLL的存在。三者中任何一者發生變化都不會影響其他倆者的正常工作,只對變化者進行重新調整即可。三層把Entity實體類的執行個體作為參數來傳遞.
總之,展示層只提供軟體系統與使用者互動的介面;商務邏輯層是介面層和資料訪問層之間的橋樑,負責資料處理和傳遞;資料訪問層只負責資料的存取工作。