VB.net+三层架构 实现登录功能

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

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

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

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

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

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

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

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

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

VB.net+三层架构 实现登录功能

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

VB.net+三层架构 实现登录功能

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

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

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

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

4、高内聚,低耦合。

........

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

'实体类,映射数据库 Public Class UserInfo #Region "定义数据表中各个属性变量" Private strUserName As String Private strPassword As String #End Region #Region "定义数据表中各个属性" ''' <summary> ''' 用户名 ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks>2012年1月10日 08:57 by JYH</remarks> Public Property userName() As String Get Return strUserName End Get Set(ByVal value As String) strUserName = value End Set End Property ''' <summary> ''' 密码 ''' </summary> ''' <value></value> ''' <returns></returns> ''' <remarks>2012年1月10日 09:01 by JYH</remarks> Public Property password() As String Get Return strPassword End Get Set(ByVal value As String) strPassword = value End Set End Property #End Region End Class '数据访问层 Imports System.Data.SqlClient Imports Entity.UserInfo Public Class da_UserInfo '连接数据库的语句: Private connStr As String = "server=192.168.24.222;database=charge3_sys;uid = sa;pwd=123456" Public Function GetDataRow(ByVal EntityUserInfo As Entity.UserInfo) As Entity.UserInfo Dim sql As String = "select * from UserInfo where UserName='" & EntityUserInfo.userName & "'" Dim conn As SqlConnection = New SqlConnection(connStr) Dim cmd As SqlCommand = New SqlCommand(sql, conn) Dim sdr As SqlDataReader = Nothing Dim UserDataTable As DataTable = New DataTable() Dim ds As New DataSet Dim dap As SqlDataAdapter = New SqlDataAdapter(cmd) Dim EntityUserInfo1 As New Entity.UserInfo Try conn.Open() dap.Fill(ds) Dim dr As DataRow = ds.Tables(0).Rows(0) EntityUserInfo1.userName = dr("UserName") EntityUserInfo1.password = dr("Password") Return EntityUserInfo1 Catch ex As Exception EntityUserInfo1.password = "" Return EntityUserInfo1 Finally If Not IsNothing(conn) Then conn.Close() End If End Try End Function End Class '业务逻辑层 Imports Entity Imports DAL.da_UserInfo Public Class b_userInfo Public Function Check(ByVal EntityUserInfo As Entity.UserInfo) As Boolean Dim DALUserInfo As New DAL.da_UserInfo Dim EntityUserInfo2 As New Entity.UserInfo EntityUserInfo2.userName = EntityUserInfo.userName EntityUserInfo2 = DALUserInfo.GetDataRow(EntityUserInfo2) If Trim(EntityUserInfo2.password) = Trim(EntityUserInfo.password) Then Return True Else Return False End If End Function End Class


'UI层,窗体代码Imports Entity Imports BLL Public Class frmLogin Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click Me.Close() End Sub Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click If Trim(txtUserName.Text) = "" Or Trim(txtPassword.Text) = "" Then MsgBox("请填写完整信息!") Exit Sub End If Dim EntityUserInfo As New Entity.UserInfo Dim BLLUserInfo As New BLL.b_userInfo EntityUserInfo.userName = txtUserName.Text EntityUserInfo.password = txtPassword.Text If BLLUserInfo.Check(EntityUserInfo) Then MsgBox("登录成功") gbLoginOk = True Me.Close() Else MsgBox("输入错误,请重新输入!") Exit Sub End If End Sub Public LoginOk As Boolean = False Private Sub frmTest_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed Charg.frmMain.Show() If LoginOk = False Then End End Sub End Class