七层学习
来源:互联网 发布:法院速录员听打软件 编辑:程序博客网 时间:2024/06/05 20:52
七层学习
七层就是在三层的基础之上,添加了外观层—设计模式的外观模式、抽象工厂、反射、接口层。
外观层:主要是把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
七层的学习总是在参考博客,学到了很多东西,棒棒的,就像米老师今天说的站在巨人的肩膀上学习。
1 0
- 七层学习
- osi七层模型学习笔记
- 关于OSI七层模型第三层学习总结-NEtwork(自己每天的学习总结)
- OSI七层协议模型、TCP/IP四层模型学习笔记
- WebGIS学习(七)WebGIS中栅格、矢量图层设计之栅格、矢量图层的本质
- OSI七层协议模型、TCP/IP四层模型学习笔记
- 七层协议
- 七层协议
- osi 七层模型
- 网络七层协议
- OSI七层协议
- 七层协议
- OSI七层模型
- OSI七层模型
- OSI七层模型
- OSI七层协议
- OSI七层协议
- OSI七层模型
- 数据结构与算法(七)
- android studio 菜单中的app运行按钮上有个叉号,原因与解决办法
- 【FastDFS】——基本概念
- Redis key 设计技巧
- 高通 8x26 andorid light sensor(TSL258x) 开发
- 七层学习
- php-redis扩展编译
- Redis持久化配置
- 《现代操作系统》笔记
- Java Web开发6___包含 Web 资源----RequestDispatcher.include 方法
- redis安装
- 如何教孩子Scheme编程(1)
- react学习中的一些细节
- 某个土壤检测网页项目记录