VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > VB.net教程 >
  • VB.net+三层架构 实现登录功能

 

       理解分层真的花费了很长的时间,不过现在看来,对分层还是有了一些初步的理解,暂时贴出来见见光光,里面可能有很多不足到之处,希望大家能及时指出来,感激不尽,在此谢过了,小菜虫迫切需要您的指教。

       一、首先说说为什么要分层?

      背景:2011年,廊坊师范学院,信息技术作品展。

      事件:我们七个同学一起合作用VB做了一个小程序名叫《宝宝乐园》,其中,有人做英语部分,有人做算术部分,有人做电子琴,有人做涂鸦,还有人做动画界面,还有人收集材料,总之,最后通过加载窗体的方式攒出来了一个程序。我们美名曰这个过程叫做团队合作开发~

        初步学习了三层之后才晓得这只是把一个人的工作分给了多个人来干,团队合作效率非常差,而且程序运行非常不和谐,就好像一件上衣,两个人做袖子,一个人做领子,还有一个人做中间部分,最后缝到一起。当袖子出了问题,就得把线拆掉,然后重新做袖子,做袖子的人还要一段段的找袖子的哪部分出了问题,做好之后,还要继续缝到上衣中。至于最后上衣的样子就不用说了。而且程序部分都是各做各的,没有任何规范可言。

        那么,我们初步认识一下三层: 如果把项目暂且分成三层,UI层、DAL层、BLL层,如下图的三者的联系:

       1、表示层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。

 

  2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。

 

  3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。

            

       当然下图中也有一个Entity实体类,他在三层中并不是作为一层而存在的,而是作为一个类库,起到封装的作用,带着参数像血液一样流走与三层之间,谁需要就给谁,这是我的理解。

       

       到底为什么要分层呢?因为分层具备的优点:

       1、分工就明确多了,各人只需要关注自己的那一层,这样就可以根据工作人员各自的优势来分工,有助于提高效率。

       2、代码就规范多了,各人根据UML图或者文档提供的资料,进行统一的规范。

       3、层次清晰,利于维护。

       4、高内聚,低耦合。

........

二、那么下面我贴出一个简单的登录系统的代码,通过三层和Vb.net实现


  1.  
    '实体类,映射数据库
  2.  
    Public Class UserInfo
  3.  
    #Region "定义数据表中各个属性变量"
  4.  
    Private strUserName As String
  5.  
    Private strPassword As String
  6.  
    #End Region
  7.  
    #Region "定义数据表中各个属性"
  8.  
    ''' <summary>
  9.  
    ''' 用户名
  10.  
    ''' </summary>
  11.  
    ''' <value></value>
  12.  
    ''' <returns></returns>
  13.  
    ''' <remarks>2012年1月10日 08:57 by JYH</remarks>
  14.  
    Public Property userName() As String
  15.  
    Get
  16.  
    Return strUserName
  17.  
    End Get
  18.  
    Set(ByVal value As String)
  19.  
    strUserName = value
  20.  
    End Set
  21.  
    End Property
  22.  
    ''' <summary>
  23.  
    ''' 密码
  24.  
    ''' </summary>
  25.  
    ''' <value></value>
  26.  
    ''' <returns></returns>
  27.  
    ''' <remarks>2012年1月10日 09:01 by JYH</remarks>
  28.  
    Public Property password() As String
  29.  
    Get
  30.  
    Return strPassword
  31.  
    End Get
  32.  
    Set(ByVal value As String)
  33.  
    strPassword = value
  34.  
    End Set
  35.  
    End Property
  36.  
    #End Region
  37.  
    End Class

  1.  
    '数据访问层
  2.  
    Imports System.Data.SqlClient
  3.  
    Imports Entity.UserInfo
  4.  
     
  5.  
    Public Class da_UserInfo
  6.  
    '连接数据库的语句:
  7.  
    Private connStr As String = "server=192.168.24.222;database=charge3_sys;uid = sa;pwd=123456"
  8.  
     
  9.  
    '获得一条数据
  10.  
    Public Function GetDataRow(ByVal EntityUserInfo As Entity.UserInfo) As Entity.UserInfo
  11.  
    Dim sql As String = "select * from UserInfo where UserName='" & EntityUserInfo.userName & "'"
  12.  
    Dim conn As SqlConnection = New SqlConnection(connStr)
  13.  
    Dim cmd As SqlCommand = New SqlCommand(sql, conn)
  14.  
    Dim sdr As SqlDataReader = Nothing
  15.  
    Dim UserDataTable As DataTable = New DataTable()
  16.  
    Dim ds As New DataSet
  17.  
    Dim dap As SqlDataAdapter = New SqlDataAdapter(cmd)
  18.  
    Dim EntityUserInfo1 As New Entity.UserInfo
  19.  
    Try
  20.  
    conn.Open()
  21.  
    dap.Fill(ds)
  22.  
    Dim dr As DataRow = ds.Tables(0).Rows(0)
  23.  
    EntityUserInfo1.userName = dr("UserName")
  24.  
    EntityUserInfo1.password = dr("Password")
  25.  
    Return EntityUserInfo1
  26.  
    Catch ex As Exception
  27.  
    EntityUserInfo1.password = ""
  28.  
    Return EntityUserInfo1
  29.  
    Finally
  30.  
    If Not IsNothing(conn) Then
  31.  
    conn.Close()
  32.  
    End If
  33.  
    End Try
  34.  
    End Function
  35.  
    End Class
  36.  
     
  37.  
     
  38.  
     

  1.  
    '业务逻辑层
  2.  
    Imports Entity
  3.  
    Imports DAL.da_UserInfo
  4.  
    Public Class b_userInfo
  5.  
    '判断密码是否正确

  1.  
    Public Function Check(ByVal EntityUserInfo As Entity.UserInfo) As Boolean
  2.  
    Dim DALUserInfo As New DAL.da_UserInfo
  3.  
    Dim EntityUserInfo2 As New Entity.UserInfo
  4.  
    EntityUserInfo2.userName = EntityUserInfo.userName
  5.  
    EntityUserInfo2 = DALUserInfo.GetDataRow(EntityUserInfo2)
  6.  
    If Trim(EntityUserInfo2.password) = Trim(EntityUserInfo.password) Then
  7.  
    Return True
  8.  
    Else
  9.  
    Return False
  10.  
    End If
  11.  
    End Function
  12.  
     
  13.  
    End Class
  14.  
     

 

'UI层,窗体代码

  1.  
    Imports Entity
  2.  
    Imports BLL
  3.  
     
  4.  
     
  5.  
    Public Class frmLogin
  6.  
    Public LoginOk As Boolean = False
  7.  
     
  8.  
    Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click
  9.  
    Me.Close()
  10.  
    End Sub
  11.  
     
  12.  
    Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click
  13.  
    If Trim(txtUserName.Text) = "" Or Trim(txtPassword.Text) = "" Then
  14.  
    MsgBox("请填写完整信息!")
  15.  
    Exit Sub
  16.  
    End If
  17.  
    Dim EntityUserInfo As New Entity.UserInfo
  18.  
    Dim BLLUserInfo As New BLL.b_userInfo
  19.  
    EntityUserInfo.userName = txtUserName.Text
  20.  
    EntityUserInfo.password = txtPassword.Text
  21.  
     
  22.  
    If BLLUserInfo.Check(EntityUserInfo) Then
  23.  
    MsgBox("登录成功")
  24.  
    gbLoginOk = True
  25.  
    Me.Close()
  26.  
    Else
  27.  
    MsgBox("输入错误,请重新输入!")
  28.  
    Exit Sub
  29.  
    End If
  30.  
     
  31.  
    End Sub
  32.  
     
  33.  
    Private Sub frmTest_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  34.  
    Charg.frmMain.Show()
  35.  
    If LoginOk = False Then End
  36.  
    End Sub
  37.  
    End Class
  38.  
     
  39.  
     
  40.  
     
  41.  
     
  42.  

相关教程