上篇博客介绍了面向过程思维设计的vb.net登录界面,这篇文章就简单介绍一下我用三层架构思想实现的vb.net登录功能吧,还请高手多多指点,初次使用三层架构思想,使用难免有错误之处!
登录界面主要功能
此登录界面只是简单的实现了与数据库连接,登录成功时提示:‘登录成功!’,登录失败时提示:'登录失败!'。单击取消按钮可退出此系统。
2.数据库设计
根据功能介绍,此数据库设计比较简单,在此我只设计了一张表,跟上篇博客中使用的数据库相同,在此展现下数据库表的内容。
UserInfo数据表表结构,如图
我在数据表中添加的几条用户信息,如图
3.在vs2010中,vb.net的登录操作
运用三层架构思想来实现上机登录,不得不提提三层,看到下图了么,是不是对三层又有了深的认识。
三层架构各层之间的引用:
- DAL所在程序集不引用BLL和UI
- BLL需要引用DAL
- UI直接引用BLL,可能会间接引用DAL
- DAL 、BLL、 UI 都需要引用Entity
三层架构的具体应用原则:
- DAL只提供基本的数据访问,不包含任何业务相关的逻辑处理;
- UI只负责显示和采集用户操作,不包含任何的业务相关的逻辑处理;
- BLL负责处理业务逻辑。通过获取UI传来的操作指令,决定执行业务逻辑,在需要访问数据源的时候直接交给DAL处理。处理完成后,返回必要数据给UI。
下面说一下vb.net中登录的操作
看到这幅图了嘛,下面咱来说说各层之间的具体实现。
①对UI显示层,界面设计如图
"UI显示层"代码设计
Public Class UserLogin
'单击确定按钮,判断登录成功与否。
Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOk.Click
Dim LoginUser As New LoginEntity.e_UserInfo '定义一个LoginEntity.e_UserInfo对象
Dim Bcheck As New LoginBLL.LoginManager '定义一个LoginBLL.LoginManager对象
LoginUser.UserID = txtUserName.Text()
LoginUser.Password = txtPassword.Text()
'采集用户信息,展现登录结果
If Bcheck.SelectUIandEntity(LoginUser) Then
MsgBox("登录成功!")
Else
MsgBox("登录失败!")
End If
End Sub
'退出系统
Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click
End
End Sub
End Class
②"业务逻辑层"代码设计
Imports LoginEntity
Imports LoginDAL.UserDAO
'B层业务处理(逻辑),做判断
Public Class LoginManager
Function SelectUIandEntity(ByVal User As LoginEntity.e_UserInfo) As Boolean
Dim DalUser As New LoginDAL.UserDAO
Dim EntityUser As New LoginEntity.e_UserInfo
EntityUser.UserID = User.UserID
EntityUser = DalUser.selectUserInfoFormUserInfoTable(EntityUser)
'判断操作
If EntityUser.Password = User.Password Then
Return True
Else
Return False
End If
End Function
End Class
③
"数据访问层"代码设计
'引用命名空间
Imports System.Data.SqlClient
Imports LoginEntity
Public Class UserDAO
'连接数据库
Dim sqlConnectStr As String = "server=waly-pc;database=Login;uid=sa;pwd=123456;"
Dim sqlConnection1 As SqlConnection = New SqlConnection(sqlConnectStr)
'自定义检查参数
Function selectUserInfoFormUserInfoTable(ByVal User As LoginEntity.e_UserInfo) As LoginEntity.e_UserInfo
Dim sql As String = "select * from UserInfo where UserID='" & User.UserID & "'" 'sql语句
Dim cmd As SqlCommand = New SqlCommand(sql, sqlConnection1) '定义sqlCommand对象
Dim read As SqlDataReader '定义sqlDataReader对象
Dim UserDataTable As New DataTable '定义一个DataTable对象
Dim User1 As New LoginEntity.e_UserInfo
Try
sqlConnection1.Open()
read = cmd.ExecuteReader()
UserDataTable.Load(read)
User1.UserID = UserDataTable.Rows(0)("UserID") '感觉这一行和下一行代码应该写到B层的,可是写过去总是出错
User1.Password = UserDataTable.Rows(0)("UserPassword")
Return User1
Catch ex As Exception
User1.Password = ""
Return User1
Finally
If Not IsNothing(sqlConnection1) Then
sqlConnection1.Close()
End If
End Try
End Function
End Class
④
"实体层"代码设计
'引用命名空间
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
'声明用户的两个属性值:UserID 和 Password
Public Class e_UserInfo
Private e_UserID As String
Public Property UserID As String
Get
Return e_UserID
End Get
Set(ByVal value As String)
e_UserID = value
End Set
End Property
Private e_Password As String
Public Property Password As String
Get
Return e_Password
End Get
Set(ByVal value As String)
e_Password = value
End Set
End Property
End Class
注:此Demo源码以上传至:VB.NET用户登录(三层架构思想)