首页 > 代码库 > 三层,你真的理解了吗?
三层,你真的理解了吗?
这篇博客,在草稿箱存了很久,直至今日才准备发表。为什么呢?刚开始写这个博客的时候是三层登录刚刚实现。代码是借鉴的网上大神的,只是实现了简单的登录功能。知道它有三个层,每层是干吗的,理解也仅仅局限于官方的解释。也就是下面的这些东东:
UI(view):显示层,只负责显示和采集用户操作,不包含任何的业务相关的逻辑处理。
BLL(Business Logic Layer):业务逻辑层,通过获取UI传来的操作指令,决定执行业务逻辑,在需要访问数据源的时候直接交给DAL处理。处理完成后,返回必要数据给UI.
DAL(Data Access Layer):数据访问层,只是提供基本的数据访问,不包含任何业务相关的逻辑处理。
看见了之后,头都大了,说的不错,但是反应到代码里面到底是怎么个样子吗?不懂啊~~~所以这篇文章,直到今天,才得以重见天日。
现在对它的理解稍稍好了那么一点,下面让大家看看他们之间的对话,看看哪个人说错了,拉出去枪毙!
UI层说:要想登录就必须要验证用户,要么成功,要么失败!
UI层代码:
<span style="font-size:18px;">Public Class frmLogin Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click Dim LUser As New Entity.User '实例化LUser为实体层用户 Dim BCheck As New BLL.BllLogin '定义BCheck为B层的登陆方法 LUser.ID = txtUserID.Text LUser.Password = txtPwd.Text If BCheck.Check(LUser) = True Then MsgBox("登录成功!") Else MsgBox("登录失败!") End If End Sub Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click End End Sub End Class </span>
BLL层说:好的,我告诉你验证用户的方法,就是比较界面输入的用户名和密码跟数据库中提取出来的数据是否一致。
B层代码:
<span style="font-size:18px;">Public Class BllLogin Function Check(ByVal User As Entity.User) As Boolean Dim DaUser As New DAL.DalUserInfo '定义DaUser为D层的用户信息 Dim BlUser As New Entity.User BlUser.ID = User.ID 'B层引用的D层的User.ID BlUser = DaUser.Check(BlUser) 'bll层对Dal层的判断方法 '判断密码是否跟实体层的密码是否一致 If BlUser.Password = User.Password Then Return True Else Return False End If End Function End Class</span>
DAL层说:你们跟我说,想要什么数据,我拿钥匙去数据库里面取。
DAL层代码:
<span style="font-size:18px;">Imports System.Data.SqlClient '命名空间 Public Class DalUserInfo '联接数据库,ConnStr用来初始化Connection对象 initial Catalog是要联接的数据库的名字 Dim ConnStr As String = "Data Source=192.168.24.175;Initial Catalog=Login ;User ID=sa;Pwd=123456" Dim conn As SqlConnection = New SqlConnection(ConnStr) '创建联接对象 Function Check(ByVal User As Entity.User) As Entity.User '数据库查询语句 Dim sql As String = "select * from UserInfo where ID='" & User.ID & "'" Dim cmd As SqlCommand = New SqlCommand(Sql, conn) Dim read As SqlDataReader Try '先执行try里面的语句,如果出现错误,就马上跳入Catch中 conn.Open() '打开联接 read = cmd.ExecuteReader '返回类型为SqlDataReader,此方法用于查询操作 read.Read() User.ID = read.Item("ID") User.Password = read.Item("Password") Return User Catch ex As Exception User.Password = "" Return User End Try End Function End Class</span>
Entity层说:UI层、DAL层、BLL层,没有我这传声筒,你们去哪找个具体的对象来练手~
Entity层代码:
<span style="font-size:18px;"> Public Class User Private userID As String '定义一个私有变量userID为字符串类型 Private userPwd As String '定义一个私有变量userPwd为字符串类型 Public Property ID() As String Get’读 Return userID End Get Set(value As String)’写 userID = value End Set End Property Public Property Password() As String Get Return userPwd End Get Set(value As String) userPwd = value End Set End Property End Class </span>
总之我们的UI层主外,就像老板,负责揽活和交活。BLL层就是比较专业一些了,就像设计师,UI层从外面揽的活,他来做逻辑上的处理,进行出谋划策,提供建造图纸。DAL层就比较辛苦了,就像工人,听从组织安排,整天跟砖头水泥打交道,干活就行,啥操心的活都让BLL层处理去吧。
这次的理解到不了炉火纯青的地步,但是似乎比刚开始的生搬硬套好了那么一些。现在发现自己还是一个胆小鬼,当初只要踏踏实实的把注释写好,把各个层的代码,代码和功能放到一起进行对比理解,搞懂代码和功能之间的对应关系,绝对是so easy!当初大部分时间还是花在不愿意动脑,纠结犹豫上面了。还有做事之前一定要考虑,执行一个番茄的目的,目标不明确,就不要怪自己在别的地方留恋太久了。