vb.net小試三層架構

  在對三層架構有了初步瞭解後,用vb.net作了一個小的程序,真的很小,僅僅是爲了體現一下三層之間機制。下面是我設計的操做界面:sql

還有程序集和類的分佈狀況,數據庫


接下來是數據的設計,數據庫用到的是SQL Server2008 架構


   三層架構,用簡單的話來歸納說就是:.U層傳入UI命令和參數,而後調用B層的業務邏輯,B層中業務邏輯要用到的數據是經過調用D層訪問數據庫來完成.經過這樣的調用,D層的檢索結果返給B,B層經過業務邏輯加工、判斷、處理數據,最後將處理結果返給UI層。ui

   程序的功能包括對錶中信息的增刪改查,由於都展現出來篇幅過長,就選擇其中添加的功能來進行闡述。接下來看代碼是怎麼體現出來的。spa

   先看一下U層是怎麼來引用B層的.net

 

   Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click '添加按鈕
        Dim ADDStu As New StuBLL.ManageBLL  '實例化B層的類ManageBLL,實現對B層的引用
        Dim Ustudent As New StuEntity.StudentEntity '實例化實體層類StudentEntity,方便存儲參數
        '對文本框的輸入作限制
        If Trim(txtID.Text) = "" Or IsNumeric(Trim(txtID.Text)) = False Then
            MessageBox.Show("請輸入合適學號,再進行該操做")
            Exit Sub
        End If
        If Trim(txtName.Text) = "" Then
            MessageBox.Show("請輸入姓名,再進行該操做")
            Exit Sub
        End If
        If Trim(txtTel.Text) = "" Or IsNumeric(Trim(txtTel.Text)) = False Then
            MessageBox.Show("請輸入聯繫電話,再進行該操做")
            Exit Sub
        End If
        '給實體類的屬性賦值
        Ustudent.StuID = CInt((txtID.Text))
        Ustudent.StuMarks = Trim(CStr(txtName.Text))
        Ustudent.StuTel = CDec(txtTel.Text)
        '調用類方法 AddStuManager 並報告
        If ADDStu.AddStuManager(Ustudent) Then
            MessageBox.Show("添加成功,請刷新")
        Else
            MessageBox.Show("該學號已添加,請從新添加")

        End If

    End Sub

     經過上面的代碼,知道U層實例化B層的類ManageBLL 調用了它的AddStuManager方法 完成了給操做,它就是這樣引用了B層。設計

   接下看看,它所引用的B層是如何構建並實現的:code

Imports StuDAL
Imports StuEntity
Public Class ManageBLL
    Public Function AddStuManager(ByVal stuInfoEn As StuEntity.StudentEntity) As Boolean '判斷能否插入信息,並返回布爾值
        Dim Controller As New StuDAL.SqlDAL   '實例化D層類sqlDAL,完成對D層的引用
        Dim StuInfo As New StuEntity.StudentEntity   '引用實體類,以便儲存必定的參數

        If Controller.IsExist(stuInfoEn) = True Then   '根據ID判斷該條記錄是否已經存在,若存在返回False
            Return False
        Else                                        '若不存在,執行添加的方法,並返回True
            Controller.AddStu(stuInfoEn)
            Return True
        End If
    End Function
End Class

     其實B層發揮的做用其實很大,對數據加工在上面的代碼中沒有很好的體現,只是對D層返回的數據進行了簡單的判斷。這裏B層實例化了D層中的類sqlDAL ,調用了它的IsExit()和AddStu()方法,就這樣引用了D層,完成了本身的業務邏輯。cmd

   不管B層的邏輯簡單仍是複雜,都妨礙不了D層,它只專一與對數據庫數據的操做。it

 

Imports StuEntity
Public Class SqlDAL
    Public Function AddStu(ByVal stuinfoen As StuEntity.StudentEntity) As Boolean '根據傳入的參數StudentEntity,執行 數據庫 插入命令 並返回布爾值

        Dim con As SqlClient.SqlConnection
        Dim cmd As SqlClient.SqlCommand
        Dim intResult As Integer

        con = New SqlClient.SqlConnection(ContactDAL.SqlString())  ‘創建對數據庫的鏈接
        cmd = con.CreateCommand()

        cmd.CommandText = "insert into T_Names (ID,Name,Tel) values (" & stuinfoen.StuID & ",'" & stuinfoen.StuMarks & "'," & stuinfoen.StuTel & ")"  ’對數據中數據操做的具體SQL語句
        cmd.CommandType = CommandType.Text
        con.Open()   ‘打開對數據庫的鏈接
        intResult = cmd.ExecuteNonQuery()   ,執行SQl語句,並返回執行結果
        If intResult < 0 Then   ,若是操做成功,則返回True,失敗則返回False
            Return True
        Else
            Return False
        End If
        con.Close()   ’關閉鏈接,
        con = Nothing   ,清楚存儲
    End Function
    Public Function IsExist(ByVal stuinfoen As StuEntity.StudentEntity) As Boolean  '根據傳入的參數StudentEntity,執行數據查詢命令,檢查是否有要檢索的內容
        Dim con As SqlClient.SqlConnection = New SqlClient.SqlConnection(ContactDAL.SqlString())
        Dim cmd As SqlClient.SqlCommand
        Dim dalReader As SqlClient.SqlDataReader

        cmd = con.CreateCommand
        cmd.CommandText = "select *from T_Names where ID='" & stuinfoen.StuID & "'"
        cmd.CommandType = CommandType.Text
        con.Open()
        dalReader = cmd.ExecuteReader()

        If dalReader.HasRows = True Then
            Return True
        Else
            Return False
        End If
        con.Close()
        con = Nothing
    End Function
End Class

     三層之間U層引用B層,B層引用D層這樣一個機制就這樣構成了。

   這裏不得再也不提一下這個實體層StuEntity,它存在於三層架構以外,但它的存在大大幫助了三層的實現,由於在層與層之間的調用上須要傳遞一些參數,實體類剛好就是這樣一個裝載參數的容器。經過上面的代碼也能夠看出,三個層中都引用到了實體類,並且主要用於儲存和傳遞參數。如下是實體層的構建:

 

'定義實體類,存儲數據表T_Names中的數據
Public Class StudentEntity       '聲明私有字段
    Private _StuID As Integer
    Private _StuMark As String
    Private _StuTel As Integer

    Property StuID As Integer    '定義StuId屬性
        Get
            Return _StuID
        End Get
        Set(value As Integer)
            _StuID = value
        End Set
    End Property
    Property StuMarks As String   '定義StuMarks屬性
        Get
            Return _StuMark
        End Get
        Set(value As String)
            _StuMark = value
        End Set
    End Property
    Property StuTel As Integer   '定義StuTel屬性
        Get
            Return _StuTel
        End Get
        Set(value As Integer)
            _StuTel = value
        End Set
    End Property
End Class

   這是我對三層的理解,這個小例子的製做讓我對三層有了進一步的瞭解,其中還有些誤差,還望各位讀者多多指出,相互交流,共同進步。

相關文章
相關標籤/搜索