天天看點

VB.NET版三層登入執行個體

       上篇部落格簡單介紹了下三層架構,看着很簡單,無非是功能去分層實作,每層有每層的職責,讓資料在三層之間來回傳輸就可以了,進而更好地解耦,但是作為一個小小小菜鳥,一旦實際使用還是很傷腦筋的,下面以使用者登入為例,來看看三層架構是如何被應用的。

        UI層

      向使用者展現特定的資料,采集使用者的輸入資訊和操作,與使用者進行互動。

VB.NET版三層登入執行個體
Public Class Form1
    Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
        Dim manager As New LoginBLL.LoginManager  '執行個體化并引用
        Dim user As New LoginModel.UserInfo

        user.UserName = txtUserName.Text.Trim  '給實體層指派
        user.Password = txtPassword.Text

        manager.UserLogin(user)  '調給B層并判斷
        MessageBox.Show("登入使用者" + user.UserName)
    End Sub
End Class
           

       BLL層

      BLL層是三層架構的核心,業務邏輯放到這一層,相當于資料的中轉站了,分别從UI層和DAL層擷取使用者資訊和資料資訊,然後再回饋給這兩層。

Public Class LoginManager
    Public Function UserLogin(ByVal user As LoginModel.UserInfo) As LoginModel.UserInfo
        Dim uDao As New LoginDAL.UserDAO  '執行個體化D層中UserDAO對象
        Dim Uuser As New LoginModel.UserInfo '定義實體層參數用來指派
        Uuser = uDao.SelectUser(user)  '将實體user傳給D層

        If IsNothing(Uuser.UserName) Then
            Throw New Exception("登入失敗")
        Else
            MsgBox("登陸成功")
        End If
        Return Uuser  '将實體user傳回到U層
    End Function
End Class
           

         DAL層

      這一層就是和資料庫打交道了,執行資料庫資訊的增删改查。

Imports System.Data.SqlClient
Public Class UserDAO
    Public conn As New SqlConnection("Server=DESKTOP-5KMOCVI;Database=Login;User ID=sa;Password=123")  '連接配接資料庫
    Public Function SelectUser(ByVal user As LoginModel.UserInfo) As LoginModel.UserInfo  '傳實體UserInfo以便參數調用
        Dim sql As String = "SELECT ID,UserName,Password FROM USERS WHERE [email protected] AND [email protected]" 'SQL查詢語句
        Dim cmd As New SqlCommand(sql, conn) '構造方法,執行和連接配接
        '增加兩個參數@UserName、@Password
        cmd.Parameters.Add(New SqlParameter("@UserName", user.UserName))
        cmd.Parameters.Add(New SqlParameter("@Password", user.Password))

        conn.Open() '打開資料連接配接
        Dim reader As SqlDataReader = cmd.ExecuteReader '定義類型為sqlDatareader的變量reader,并執行SQL語句
        Dim Buser As New LoginModel.UserInfo  '執行個體化新的UserInfo
        '使用SqlDataReader對象Read()方法進行逐行讀取
        While (reader.Read())
            Buser.UserName = reader.GetString(1) '擷取第一列中的資料
            Buser.Password = reader.GetString(2) '擷取第二列中的資料
        End While

        Return Buser  '傳回對象
        conn.Close()  '關閉資料連接配接
    End Function
End Class
           

        實體層

       資料那麼多,當然得定義一個實體來封裝資料啦,用以在三層之間來回調用。

Public Class UserInfo
    Private _username As String '封裝一些屬性,用來在三層之間傳輸資料
    Public Property UserName As String
        Get
            Return _username
        End Get
        Set(value As String)
            _username = value
        End Set
    End Property
    Private _password As String
    Public Property Password As String
        Get
            Return _password
        End Get
        Set(value As String)
            _password = value
        End Set
    End Property
End Class
           

       各層之間的引用:UI引用BLL,BLL引用DAL,Model被這仨都引用,除此之外沒引用關系喽。

     小結

       這隻是對三層架構的一個小小應用,對系統的分層展現了“高内聚,低耦合”的思想,然而這隻是一個小小的起步,因為後面還有加了設計模式的七層~~小小小菜鳥,還得繼續加油啊!

繼續閱讀