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

一、框架的搭建


U层引用Model层

B层引用Model层和DAL层

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

二、UML图

1、类图


U层:Windows1

B层:LoginUser

D层:UserDAO

Model层:UerEn

2、时序图


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

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


三、代码展示

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

结果:



四、知识点小结

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也只不过是创建的那个实体对象的名称而已。

 

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值