浅谈三层架构(2)

感受:

    对于三层的学习,自己刚开始的感觉真的是一头雾水啊,当时真的出现了很烦躁的感觉,我想这种感觉的出现真的是很可怕的,就这样耽误了两天,在网上也搜寻者自己想要的资料,昨天四姐也好心给调试了一番,顿时把自己的大脑打通了,其实问题难不难,就在于能不能打开思路了!

VB.NET的三层实现:

     上篇文章主要是对于三层有了一个表面的理解,下面针对机房收费登陆界面来进行一下简单的理解:

     UI层主要就是表面的构建,多以需要使用windows窗体来完成,而其他BLL和DAL则不需要,之间建立一个类库则可以完成自己所需要的功能。

三层的具体表现形式:


对于三层的设计,要用一个实体层来调节:


     实体层是完全面向对象的思想,作为数据的载体,在各个层之间传递。使用实体层的优点就是减少错误的发生,举一个最简单的例子:

     DAL中有一个Select方法,需要用到Username,PWD,Head三个类,使用实体层的话,则只需要传递User这一个类就可,极大的降低了系统出错的可能。

游刃其中的Entity层:

  1. Public Class Models 
  2.     '//定义的私有属性 
  3.     Private _userID As String 
  4.     Private _PWD As String 
  5.     '定义属性过程,通过属性过程,才能允许它的类来访问 
  6.     Public Property userID() As String   '将user表中的每一个数据都传上去,实体是根据表来建立的 
  7.  
  8.         Get 
  9.             Return _userID 
  10.         End Get 
  11.         Set(value As String
  12.             _userID = value 
  13.         End Set 
  14.     End Property 
Public Class Models
    '//定义的私有属性
    Private _userID As String
    Private _PWD As String
    '定义属性过程,通过属性过程,才能允许它的类来访问
    Public Property userID() As String   '将user表中的每一个数据都传上去,实体是根据表来建立的

        Get
            Return _userID
        End Get
        Set(value As String)
            _userID = value
        End Set
    End Property

前方招待的UI层:

  1. Private Sub btnOk_Click(sender As Object, e As EventArgs) Handles btnOk.Click 
  2.         Dim mgr As New Login.BLL.UserBLL   '实例业务层 
  3.         Dim user As New Entity.Models   '实例实体 
  4.         Dim users As New Entity.Models   '接收实体,用于接收UserLogin()返回的数据类型,实例化的标准必须加new 
  5.  
  6.         user.userID = txtUserName.Text.Trim()  '给实体层传入值 
  7.         user.PWD = txtPassword.Text.Trim() 
  8.  
  9.         If txtUserName.Text = " " Then    '判断输入是否正确 
  10.             MsgBox("用户名不能为空!"
  11.             Return 
  12.         End If 
  13.         If txtPassword.Text = " " Then   '判断密码是否输入正确 
  14.             MsgBox("密码不能为空!"
  15.             Return 
  16.         End If 
  17.  
  18.         Try 
  19.             users = mgr.UserLogin(user) 
  20.  
  21.             If (users.userID Is Nothing And users.PWD Is Nothing) Then  '如果user不为空,则可以进行下一步登陆 
  22.                 MsgBox("登陆失败,用户名和密码不匹配"
  23.                 Return 
  24.             Else 
  25.                 MsgBox("登陆成功!登陆用户:  " + user.userID) 
  26.             End If 
  27.         Catch ex As Exception 
  28.             MsgBox(ex.Message())    '有错误则提示错误窗体 
  29.         End Try 
  30.  
  31.     End Sub 
Private Sub btnOk_Click(sender As Object, e As EventArgs) Handles btnOk.Click
        Dim mgr As New Login.BLL.UserBLL   '实例业务层
        Dim user As New Entity.Models   '实例实体
        Dim users As New Entity.Models   '接收实体,用于接收UserLogin()返回的数据类型,实例化的标准必须加new

        user.userID = txtUserName.Text.Trim()  '给实体层传入值
        user.PWD = txtPassword.Text.Trim()

        If txtUserName.Text = " " Then    '判断输入是否正确
            MsgBox("用户名不能为空!")
            Return
        End If
        If txtPassword.Text = " " Then   '判断密码是否输入正确
            MsgBox("密码不能为空!")
            Return
        End If

        Try
            users = mgr.UserLogin(user)

            If (users.userID Is Nothing And users.PWD Is Nothing) Then  '如果user不为空,则可以进行下一步登陆
                MsgBox("登陆失败,用户名和密码不匹配")
                Return
            Else
                MsgBox("登陆成功!登陆用户:  " + user.userID)
            End If
        Catch ex As Exception
            MsgBox(ex.Message())    '有错误则提示错误窗体
        End Try

    End Sub

掌管中心的BLL层:

  1. Public Class UserBLL 
  2.     Function UserLogin(ByVal user As Entity.Models) As Entity.Models 
  3.         Dim uDAL As New Login.DAL.UserDAL    '实例化了DAl中的UserDAL 
  4.         Dim users As New Entity.Models  '实例化实体层信息表 
  5.  
  6.         users = uDAL.SelectUser(user)      'SelectUser方法返回一个实体类,给他赋值User 
  7.  
  8.         Return users 
  9.     End Function 
  10. End Class 
Public Class UserBLL
    Function UserLogin(ByVal user As Entity.Models) As Entity.Models
        Dim uDAL As New Login.DAL.UserDAL    '实例化了DAl中的UserDAL
        Dim users As New Entity.Models  '实例化实体层信息表

        users = uDAL.SelectUser(user)      'SelectUser方法返回一个实体类,给他赋值User

        Return users
    End Function
End Class
默默奉献的DAL层:

  1. Public Function SelectUser(ByVal user As entity.models) As entity.models   '对user中加入一个selectuser的方法 
  2.        Dim conn As SqlConnection   '定义连接打开数据库 
  3.        Dim cmd As New SqlCommand    '定义数据库命令 
  4.        conn = New SqlConnection("Server=huoyajing; Database=charge_sys; User ID=sa ;Password=123456")    '实例化SQLUtil中返回的字符串 
  5.        cmd.Connection = conn 
  6.  
  7.        cmd.CommandText = "select * from  User_Info Where userID=@UserID and PWD=@Password"   '存储过程 
  8.  
  9.        cmd.Parameters.Add(New SqlParameter("@UserID ", user.userID))   '赋值,传参 
  10.        cmd.Parameters.Add(New SqlParameter("@Password", user.PWD)) 
  11.        cmd.CommandType = CommandType.Text 
  12.        conn.Open()   '打开连接 
  13.  
  14.        Dim reader As SqlClient.SqlDataReader    '读取数据库中的表 
  15.        reader = cmd.ExecuteReader() 
  16.  
  17.        Dim users As New Entity.Models   '实例化实体 
  18.  
  19.        While (reader.Read())   '无错误,则持续执行 
  20.            users.userID = reader.GetString(reader.GetOrdinal("userID"))   '调用一次GetOrdinal方法,便在循环中使用 
  21.            users.PWD = reader.GetString(reader.GetOrdinal("PWD")) 
  22.        End While 
  23.  
  24.        conn.Close() 
  25.        Return users 
  26.    End Function 
 Public Function SelectUser(ByVal user As entity.models) As entity.models   '对user中加入一个selectuser的方法
        Dim conn As SqlConnection   '定义连接打开数据库
        Dim cmd As New SqlCommand    '定义数据库命令
        conn = New SqlConnection("Server=huoyajing; Database=charge_sys; User ID=sa ;Password=123456")    '实例化SQLUtil中返回的字符串
        cmd.Connection = conn

        cmd.CommandText = "select * from  User_Info Where userID=@UserID and PWD=@Password"   '存储过程

        cmd.Parameters.Add(New SqlParameter("@UserID ", user.userID))   '赋值,传参
        cmd.Parameters.Add(New SqlParameter("@Password", user.PWD))
        cmd.CommandType = CommandType.Text
        conn.Open()   '打开连接

        Dim reader As SqlClient.SqlDataReader    '读取数据库中的表
        reader = cmd.ExecuteReader()

        Dim users As New Entity.Models   '实例化实体

        While (reader.Read())   '无错误,则持续执行
            users.userID = reader.GetString(reader.GetOrdinal("userID"))   '调用一次GetOrdinal方法,便在循环中使用
            users.PWD = reader.GetString(reader.GetOrdinal("PWD"))
        End While

        conn.Close()
        Return users
    End Function

通过登录窗体,对于三层也有了一个大概的了解,下边说说其优缺点:

优点:

  • 1)安全性高,极大的降低了错误的发生率;
  • 2)三层的目的就是为了实现“高内聚,低耦合”,达到了解耦的目的;
  • 4)减轻了开发人员的大脑思维,他们可以只关注于整个结构中的某一层;
  • 5)项目分工明确,适应性很强,有利于对代码的修改以及后期的维护与升级;

缺点:

  • 1)增加了代码量,增加了工作量。
  • 2)由于把原有的一层划分为了三层,这样大大降低了系统的性能,使之前的许多能够直接访问数据库的,现在却要通过中间层来完成。

总结:

   对于三层架构的使用,虽然能够提高代码的适应性,但是对于逻辑简单的程序来说还是避免使用为好,否则只会得到适得其反的效果.合理的使用三层架构,才能让其各司其职,各尽所能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值