三层架构—实践篇(.Net登录实例)

一、框架的搭建

三层架构—实践篇(.Net登录实例)_第1张图片

U层引用Model层

B层引用Model层和DAL层

D层引用Model层和数据库连接ImportsSystem.Data.SqlClient  

二、UML图

1、类图

三层架构—实践篇(.Net登录实例)_第2张图片

U层:Windows1

B层:LoginUser

D层:UserDAO

Model层:UerEn

2、时序图

三层架构—实践篇(.Net登录实例)_第3张图片

3、包图(设计模式在代码中未体现,以后补充)

Link用来存储连接字符串及SQL语句(以后补充)

三层架构—实践篇(.Net登录实例)_第4张图片

三、代码展示

1、实体类

Public Class UserEn
'定义所用到的属性
    Private _userName As String
    Public Property UserName As String
        Get
            Return _userName
        End Get

        Set(ByVal value As String)
           _userName = value
        End Set
    End Property

    Private _password As String
    Public Property Password As String
        Get
            Return _password
        End Get

        Set(ByVal value As String)
            _password = value
        End Set
    End Property
End Class

2、U层

Imports Login.BLL           '层中引用,在调用对象时不用写命名空间名
Imports Model
Public ClassStartWindow

    '退出程序
    Private Sub btnexit_Click(sender As Object,e As EventArgs) Handles btnexit.Click
        End
    End Sub
    '登录

    Private Sub btnOK_Click(sender As Object, eAs EventArgs) Handles btnOK.Click
        Try

            Dim user1 As New UserEn                 '实例化实体类,user1为实体类的对象
            Dim check As New LoginUser              '实例化B层的LoginUser类
            Dim user As Boolean                    '定义布尔型变量,用来返回(也可定义为实体类型,返回实体类)
            
 user1.UserName =txtUserName.Text.Trim    '把文本框用户名赋给实体类中的UserName
            user1.Password =txtPassword.Text          '同理

            If txtUserName.Text = ""Then              '判断用户名文本框是否为空
               MessageBox.Show("请输入用户名!")
            End If

            If txtPassword.Text = ""Then               '同理
               MessageBox.Show("请输入密码!")
            End If
            user = check.Login(user1)                  '把B层Loin方法判断返回的值赋予user,左右同时为真则登录成功
            MessageBox.Show("成功登录!")
        Catch ex As Exception                           '捕获从B/D层抛出的异常

            MsgBox(ex.Message)
        End Try
    End Sub
End Class

3、B层

Imports Model
Imports Login.DAL

Public ClassLoginUser

    Function Login(ByVal user1 As Model.UserEn)As Boolean
        Dim Dal As New UserDAO             '实例化D层UserDAO对象
        Dim user2 As Boolean                '定义变量

        user2 = Dal.SelectUser(user1)      '调出D层方法SelectUser
        '判断返回结果 
        If user2 Then
            Return True
        Else
            Throw NewException("登录失败!")
            Exit Function
        End If
    End Function
End Class

4、D层

Imports Model ImportsSystem.Data.SqlClient '数据库连接需引用 ImportsSystem.Data.SqlClient.SqlCommand Public Class UserDAO '连接数据库 'SqlConnection表示一个到 SQL Server数据库的打开的连接。此类不能被继承。 Dim connDB As String ="Server=.;Database=MyLogin;User ID=sa;Password=123;" Dim connSQL As SqlConnection = NewSqlConnection(connDB) Function SelectUser(ByVal user1 AsModel.UserEn) As Boolean '把要执行的SQL语句赋给字符串变量sql Dim sql As String = "select * FromUserInfo where UserID=@UserName AND Password=@Password;" Dim cmd As SqlCommand = NewSqlCommand(sql, connSQL) '执行查询语句 '通过把实体的相关内容赋给参数,再将参数带到数据库对比(防止SQL注入) cmd.Parameters.Add(NewSqlParameter("@UserName", user1.UserName)) cmd.Parameters.Add(NewSqlParameter("@Password", user1.Password)) '打开连接,读取数据 connSQL.Open() Dim read As SqlDataReader =cmd.ExecuteReader() '若存在数据则返回True,否则相反 If read.Read() Then Return True Else Return False Exit Function End If End Function End Class

结果:

三层架构—实践篇(.Net登录实例)_第5张图片

三层架构—实践篇(.Net登录实例)_第6张图片

四、知识点小结

1、传实体与传参数区别

        在参数较少的情况下,使用传参比较方便;用的参数较多建议使用传实体,效率较高

注意:如果在界面上显示数据则设计到对实体的拆装箱操作

例子:C#语言

 user.ID = reader.GetInt32(0);
 user.UserName = reader.GetString(1);
 user.Password = reader.GetString(2);
  if(!reader.IsDBNull(3))

 {
   user.Email = reader.GetString(3);
}

2、每层引用与单层Imports引用区别

层与层间引用:可以通过命名空间.类名,实现调用

层中Imports引用:直接写调用的类名即可

3、实例化对象与定义同类型变量区别

newUserEn()是指在内存中开辟了一块空间,创建了一个对象,然后让一个UserEn类型的变量user引用(指向)它。user也只不过是创建的那个实体对象的名称而已。

 

你可能感兴趣的:(三层架构—实践篇(.Net登录实例))