刚敲完三层的小例子之后,感觉还是很简单的,只是通过分层让不同的层次完成不同的工作,减少耦合性。可是接下来师父就直接给了一个大难题,让我将三层转变为七层,这对我来说相当困难,自己当时根本就不知道有哪几层,就开始搜。经过一段时间的思考后,终于能够初步明白登录的七层是那些了。下面是我画的包图:

三层的时候只有UI、BLL、DAL,七层只是在原来基础上添加了外观设计模式、接口和抽象工厂,通过分层来减小耦合度。接下来如何来实现各层之间的链接呢?

U层:表示层,主要负责与界面设置。

Imports Facade   '引入外观
Imports Entity  '引入实体Public Class frmLoginPrivate Sub btnConfirm_Click(sender As Object, e As EventArgs) Handles btnConfirm.ClickIf txtUserID.Text = "" ThenMessageBox.Show("请输入用户名")txtUserID.Text = ""txtUserID.Focus()Exit SubElseIf txtPassword.Text = "" ThenMessageBox.Show("请输入密码")txtPassword.Text = ""txtPassword.Focus()Exit SubEnd IfTryDim facadeLogin As New Facade.LoginFacadeDim User As New En_UserUser.ID = txtUserID.Text.Trim()User.Password = txtPassword.Text.Trim()Dim flag As Booleanflag = facadeLogin.CheckUser(User)If flag = False ThenMsgBox("用户不存在")txtUserID.Text = ""txtPassword.Text = ""txtUserID.Select()txtUserID.Focus()End IfDim table As DataTabletable = facadeLogin.CheckPwd(User)If Trim(txtPassword.Text) = Trim(table.Rows(0).Item(1)) ThenMsgBox("登录成功")txtUserID.Text = ""txtPassword.Text = ""End IfCatchMsgBox("用户不存在或者密码不正确")txtUserID.Text = ""txtPassword.Text = ""txtUserID.Select()txtUserID.Focus()End TryEnd SubPrivate Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.ClickMe.Close()End Sub
End Class

Facade层:这一层采用外观模式,通过外观模式使U层不直接和BLL层接触,减少B层和U层之间的耦合,当然这样做现在看起来好像有点繁琐,使我们本来简单的系统复杂化,但在大项目中能够体现其优越性。

Imports BLL     '引用BLL层
Imports Entity  '引用实体Public Class LoginFacadePublic Function CheckUser(ByVal User As En_User) As Boolean'用于检查用户是否存在Dim IsUserExists As New BLL.LoginBLL()Dim flag As Booleanflag = IsUserExists.IsUserExits(User)If flag = True ThenReturn TrueElseReturn FalseEnd IfEnd Function'检查密码是否正确Public Function CheckPwd(ByVal User As En_User) As DataTableDim IsPwd As New BLL.LoginBLL()Dim table As DataTabletable = IsPwd.isPWDright(User)Return tableEnd FunctionEnd Class

BLL层:接下里就将值传给B层,交由其处理,BLL层主要对业务逻辑进行管理,相当于就是对一个业务的处理。比如登录你就需要验证用户是否存在,密码是否正确,这一层将分开的功能组合到一块来完成一个业务。

Imports IDAL        '引用IDAL
Imports Factory     '引用Factory
Imports Entity      '应用实体
Public Class LoginBLLPublic Function IsUserExits(ByVal User As En_User) As BooleanDim factory As New DateAccessDim IUser As IUserLogin'调用创建用户的工厂方法IUser = factory.CreateUserDim table As DataTableDim flag As Booleantable = IUser.CheckUser(User)If table.Rows.Count > 0 Thenflag = TrueElseflag = FalseEnd IfReturn flagEnd FunctionPublic Function IsPWDright(ByVal User As En_User) As DataTableDim factory As New DateAccessDim Iuser As IDAL.IUserLoginDim table As DataTableIuser = factory.CreateUsertable = Iuser.CheckUser(User)Return tableEnd Function
End Class

Factory层:抽象工厂+反射+配置文件

Imports IDAL    '引入IDAL
Imports System.Configuration    '引入配置文件
Imports System.Reflection
Public Class DateAccessPrivate Shared ReadOnly paceName As String = "DAL"Private Shared ReadOnly db As String = ConfigurationManager.AppSettings("<span style="color:#ff0000;">DB</span>")Public Function CreateUser() As IUserLoginDim className As String = paceName + "." + db + "LoginDAL"Dim iuser As IDAL.IUserLoginiuser = CType(Assembly.Load(paceName).CreateInstance(className), IUserLogin)Return iuserEnd Function
End Class

配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration><startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup><appSettings><add key ="<span style="color:#ff0000;">DB</span>" value ="Sql"></add><add key ="ConnString" value ="Server=.;DataBase=Login;User ID =sa;Password =1"/></appSettings>
</configuration>

标注红字的部分一定要对应,否则就会出现问题。 IDAL层:也就是接口层,实现和DAL层的连接,接口达到了统一访问的目的,另外通过接口方便DAL层的工作分配。

Imports Entity      '引用实体
Public Interface IUserLoginFunction CheckUser(ByVal enuser As En_User) As DataTable
End Interface

DAL层:主要是用来对表进行操作,通过SQL Helper来和数据库连接。

Imports Entity
Imports System.Data
Imports System.Data.SqlClient
Public Class SqlLoginDAL : Implements IDAL.IUserLoginPublic Function UserLoginDAL(ByVal enuser As En_User) As DataTable Implements IDAL.IUserLogin.CheckUserDim cmdText As String = "select * from Users where ID=@userID"Dim sqlparams As SqlParameter() = {New SqlParameter("@userID", enuser.ID)}Dim helper As New sqlHelper<span style="white-space:pre"> </span>'用于连接数据库Dim table As New DataTabletable = helper.ExecSelect(cmdText, CommandType.Text, sqlparams)Return table<span style="white-space:pre">         </span>'返回记录End Function
End Class

通过将登陆由三层转变为七层,对与变量之间的传递和调用关系理解的更清楚了,虽然还有一些欠缺,相信在接下来的机房重构中,会理解的更加深刻。。。

机房重构前奏——三层转七层相关推荐

  1. 机房重构(C#)--七层登录(一)

    一.包图 二.引用关系 三.UI层 //**************************** //项目名称:UI //命名空间:UI //文件名: LoginUI //作者: 陈海明 //创建日期 ...

  2. 【C#实践】详解三层转七层:登录

    背景 一开始借用别人的代码,敲完也是很多地方看不懂!不知道从什么地方下手!不懂三层到七层到底是怎么映射过去的! 后来就是多查,慢慢有大体的轮廓,逐个部分解决! 过程: 1.看整体,对于不懂的部分,先查 ...

  3. 【C#】机房重构——七层登录

    前言: 两个多星期的探索终于算是把登录敲通了,当"登录成功!"显示在我眼前的那一刻,我想那种快乐的感觉就好像我中了三百万大奖一样的激动吧! 三层当时不是很明白,所以三层到七层走了不 ...

  4. C# 三层架构与七层架构

    前言 学习三层的时候对于这三层有了大致的了解,但是还是说不出个一二,今天试着总结一下,将自己的知识重新梳理一遍. 三层架构 概念 三层架构通常意义上讲的就是将整个业务应用划分为:表现层(UI).业务逻 ...

  5. 个人机房重构--七层实现登录

    一.概述: 现在准备开始个人机房重构,那么就从简单的来,先用七层实现登录.我们常说的七层是指哪七层呢?其实七层就是在三层的基础上,添加了外观层--设计模式的外观模式,抽象工厂加反射,接口层.外观层主要 ...

  6. 【C#】七层登录机房重构

    前言 终于开始机房重构了,在此之前,我用三层敲了机房的部分功能,感觉还不错,现在真正到了七层,还是蛮紧张的.话不多说,开始机房的七层登录. 包图 我发现好多伙伴写七层登录的时候,都喜欢分析一下包图,那 ...

  7. 网络知识梳理--OSI七层网络与TCP/IP五层网络架构及二层/三层网络

    作为一个合格的运维人员,一定要熟悉掌握OSI七层网络和TCP/IP五层网络结构知识. 废话不多说!下面就逐一展开对这两个网络架构知识的说明: 一.OSI七层网络协议 OSI是Open System I ...

  8. OSI七层网络、TCP/IP五层网络架构、二层/三层网络

    一.OSI七层网络协议 OSI是Open System Interconnect的缩写,意为开放式系统互联. OSI参考模型各个层次的划分遵循下列原则: 1)根据不同层次的抽象分层 2)每层应当有一个 ...

  9. 【机房重构】一步一步往上爬——不仅仅是三层

    不知道大家还记不记得之前学习的UML中一个单独列出来的一种图,也就是这次我想说的包图.那个时候,让我们画机房收费系统的各种图,用例图.类图等等,通过自己反复琢磨,还都勉勉强强画出来了.唯独只有包图,我 ...

最新文章

  1. mysql 新增 删除用户和权限分配
  2. Oracle日期格式化问题:to_date(sysdate,'yyyy-MM-dd')与 to_date(to_char(sysdate,'yyyy-MM-dd'),'yyyy-MM-dd')区别
  3. 2434: [Noi2011]阿狸的打字机
  4. display:table的几个用法
  5. 蓝牙Bluetooth技术手册规范下载【转】
  6. 五岁的时候,你在干什么?
  7. 全网最全的Postman接口自动化测试
  8. LINQ Enumerable 续 II
  9. Anaconda重装后【系统找不到指定的路径】
  10. stata基础使用教程(操作版)
  11. 计算机控制键有哪些,常用的电脑快捷键大全有哪些
  12. Java - JIT即时编译器
  13. 华为HCIA Cloud Computing 华为HCIA考证笔记(已获取该证书)
  14. 【教程】区块链是数据库?那么区块链的数据存储在哪里?如何查看数据?FISCO-BCOS如何更换区块链的数据存储,由RocksDB更换为MySQL、MariaDB,联盟链区块链数据库,区块链数据库应用
  15. Shell命令:echo 命令详解
  16. Zotero简易使用教程
  17. 身份证实名认证数据API可以这样获取和使用
  18. 巴比特 | 元宇宙每日必读:超八成跑输大盘,元宇宙概念股陷入集体滑坡的困境,网友:“凭概念炒上去,凭本事跌下来”...
  19. pytorch在调用GPU的时候出现cuda runtime error (2) : out of memory at ..\aten\src\THC\THCGeneral.cpp:50
  20. 股指期货与融资融券做空机制有什么区别?

热门文章

  1. 和数(一个数等于另外两个数之和)
  2. Java 开发中 一篇文章讲清楚VO,BO,PO,DO,DTO的区别
  3. 如何找回回收站清空的文件?
  4. 计算机类期刊审稿周期
  5. html audio 列表,html5中audio实现播放列表和自动播放
  6. MINI PCI-E 引脚定义
  7. 全球与中国汽车USB充电器市场深度研究分析报告
  8. HDOJ/HDU 1133 Buy the Ticket(数论~卡特兰数~大数~)
  9. PLV - phase locking value 锁相值 MATLAB代码
  10. 网易24周年,竟拿出内部进阶必备的网络协议笔记,给程序员发福利