七层学习
七层就是在三层的基础之上,添加了外观层—设计模式的外观模式、抽象工厂、反射、接口层。
外观层:主要是把UI和BLL层分离。
抽象工厂加反射:主要是为了更换数据库的方便性,同时把DAL层中的类转换成为IDAL层中的接口,从而使BLL层实现通过调用IDAL从而调用DAL层。
接口层:把BLL和DAL分离。
七层从UI层开始,逐层依赖于下一层。除了SqlHelper和Factory之外的所有的层,都要添加对Entity层的引用,这里是关联关系,因为所有的层在使用实体层的时候,首先都先要对实体进行实例化,即New一个实体,而DAL层实现的是IDAL层中的方法,同时依赖于SqlHelper实现它自己的功能。
通过反射,实例化D层的类,调用dll方法。将B层的参数通过反射的方法, 在D层做具体实现。
Sqlhelper封装了对数据库的增删改查,减少了代码的量,提高了系统性能。
各层的具体代码:
UI层
Public Class FrmLogin
Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
'判断文本框是否为空
If txtUserID.Text = "" Then
MessageBox.Show("请您输入用户名!", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
txtUserID.Focus()
Exit Sub
ElseIf txtPWD.Text = "" Then
MessageBox.Show("请您输入密码!", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
txtPWD.Focus()
Exit Sub
End If
Dim User As New Entity.T_UserEntity
User.UserID = txtUserID.Text.Trim()
User.PWD = txtPWD.Text.Trim()
Dim Result As String
Dim facade As New Facade.LoginFacade
Result = facade.Login(User)
'用户名和密码验证的几种情况
Select Case Result
Case "此用户不存在"
MsgBox("此用户不存在,请重新输入用户名!")
txtUserID.Focus()
txtUserID.SelectAll()
Case "密码错误"
MsgBox("密码错误,请重新输入密码!")
txtPWD.Focus()
txtPWD.SelectAll()
Case "登陆成功"
MsgBox("恭喜您,登录成功!")
NowUser = txtUserID.Text.Trim()
FrmMain.Show()
Me.Hide()
End Select
End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
End
End Sub
End Class
Façade层
Public Class LoginFacade
Public Function Login(ByVal User As Entity.T_UserEntity) As String
Dim Userbll As New BLL.LoginBLL
'调用B层的方法验证用户名和密码是否正确
If Userbll.CheckUser(User) = False Then
Return "此用户不存在"
Else
If Userbll.CheckPWD(User) = False Then
Return "密码错误"
Else
Return "登陆成功"
End If
End If
End Function
End Class
BLL层
Public Class LoginBLL
'验证用户名是否正确
Public Function CheckUser(ByVal user As Entity.T_UserEntity) As Boolean
Dim Iuser As IDAL.LoginIDAL
Dim factory As New Factory.LoginFactory
Iuser = factory.CreateUserDAO()
Dim mylist As New List(Of Entity.T_UserEntity)
mylist = Iuser.SelectUserID(user)
If mylist.Count = 0 Then
Return False
Else
Return True
End If
End Function
'验证密码是否正确
Public Function CheckPWD(ByVal password As Entity.T_UserEntity) As Boolean
Dim Iuser As IDAL.LoginIDAL
Dim factory As New Factory.LoginFactory
Iuser = factory.CreateUserDAO
Dim mylist As New List(Of Entity.T_UserEntity)
mylist = Iuser.SelectPWD(password)
If mylist.Count = 0 Then
Return False
Else
Return True
End If
End Function
End Class
Imports System.Reflection
Imports System.Configuration
Public Class LoginFactory
Dim DB As String = System.Configuration.ConfigurationSettings.AppSettings("DBss")
Private Shared ReadOnly assemblyName = "DAL"
Public Function CreateUserDAO() As IDAL.LoginIDAL
Dim className As String = assemblyName + "." + DB + "LoginDAL"
Return CType(Assembly.Load(assemblyName).CreateInstance(className), IDAL.LoginIDAL)
End Function
End Class
Public Interface LoginIDAL
Function SelectUserID(ByVal User As Entity.T_UserEntity) As List(Of Entity.T_UserEntity)
Function SelectPWD(ByVal User As Entity.T_UserEntity) As List(Of Entity.T_UserEntity)
End Interface
DAL层
Public Class SqlServerLoginDAL : Implements IDAL.LoginIDAL
Public Function SelectUserID(User As Entity.T_UserEntity) As List(Of Entity.T_UserEntity) Implements IDAL.LoginIDAL.SelectUserID
Dim sqlParams As SqlParameter() = {New SqlParameter("@UserID", User.UserID)}
Dim strSql As String = "select*from T_User where UserID=@UserID"
'实例化SqlHelper
Dim helper As New SqlHelper
Dim table As New DataTable
Dim mylist As New List(Of Entity.T_UserEntity)
table = helper.GetDataTable(strSql, CommandType.Text, sqlParams)
mylist = ConvertHelper.ConvertList(Of Entity.T_UserEntity)(table)
'返回泛型
Return mylist
End Function
Public Function SelectPWD(User As Entity.T_UserEntity) As List(Of Entity.T_UserEntity) Implements IDAL.LoginIDAL.SelectPWD
Dim sqlParams As SqlParameter() = {New SqlParameter("@UserID", User.UserID), New SqlParameter("@PWD", User.PWD)}
Dim strSql As String = "select*from T_User where UserID=@UserID and PWD=@PWD"
'实例化SqlHelper
Dim helper As New SqlHelper
Dim table As New DataTable
Dim mylist As New List(Of Entity.T_UserEntity)
table = helper.GetDataTable(strSql, CommandType.Text, sqlParams)
mylist = ConvertHelper.ConvertList(Of Entity.T_UserEntity)(table)
'返回泛型
Return mylist
End Function
End Class
Entity层
Private _UserID As String
Private _PWD As String
Private _Level As String
Private _UserName As String
Private _Head As String
Public Property UserID As String
Get
Return _UserID
End Get
Set(value As String)
_UserID = value
End Set
End Property
Public Property PWD As String
Get
Return _PWD
End Get
Set(value As String)
_PWD = value
End Set
End Property
Public Property Level As String
Get
Return _Level
End Get
Set(value As String)
_Level = value
End Set
End Property
Public Property UserName As String
Get
Return _UserName
End Get
Set(value As String)
_UserName = value
End Set
End Property
Public Property Head As String
Get
Return _Head
End Get
Set(value As String)
_Head = value
End Set
End Property
End Class
七层的学习总是在参考博客,学到了很多东西,棒棒的,就像米老师今天说的站在巨人的肩膀上学习。