三层演义
来源:互联网 发布:上海千行物流网络 编辑:程序博客网 时间:2024/05/01 02:07
窗外不知是什么重物从数理楼对面的5号宿舍楼飞落,想起落下帷幕的三层。
传说中有《三国演义》,没有赶上那一个好时代,但遇到了三层演义的好时光,真是每个断点都有不同的传奇呀。先说说有趣的故事:最近的这个三层周里,一个支架撑起C++考试层、架起汉语言毕业论文开题答辩层、And go开始三层登录模式。
三层架构是软件设计的主要思想。对于初学者来说我们要理清这样一个思路:什么是三层?为什么要使用三层?三层在代码中是如何体现的?
首先,三层一般来说指的是显示层(UI)、业务逻辑层(BLL)和数据访问层(DAL),它们之间是一种直接间接联系的关系:UI与DAL就像是一对仇人互补说话,需要通过BLL这个中间大好人去调节,如图:
用序列图可以表示为:
看起是不是比较难理解,那么我们举一个简单或许不太恰当的例子,那古代的平民--大臣--皇帝与奏折的关系来说:一般来说普通百姓是见不到皇上的,大臣处于皇帝和平民之间是他们的沟通桥梁,其中奏折是一个主要的实体。如图:
通过这样的了解,我想对三层有了一个比较清晰的概念。那么第二个问题就是:为什么要使用三层?我理解的就是:
在代码中是如何体现三层的呢?
U层:
Public Class Form1 Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click Try Dim eUserB As New Model.UserInfo '实例化新的UserInfo对象,用来传递B层实体 'Dim eUserU As New Model.UserInfo '定义一个类型为UserInfo的参数,用来赋值 eUserB.UserName = txtUserName.Text.Trim '将用户名传给实体层的UserName eUserB.Pwd = txtPassword.Text '将密码传给实体层的UserName '调用B层,登录判断 Dim mgr As New BLL.LoginManager eUserB = mgr.SelectUser(eUserB) Catch ex As Exception MessageBox.Show(ex.Message.ToString()) End Try End SubEnd ClassB层:
Public Class LoginManager Public Function SelectUser(ByVal User As Model.UserInfo) As Model.UserInfo Dim uDao As New DAL.UserDAO '实例化D层中新的UserDAO对象 Dim eUserD As New Model.UserInfo '定义一个类型为实体层UserInfo的参数,用于赋值 eUserD = uDao.SelectUser(User) '判断是否查询到记录,若有,登录成功,并返回实体User1 If IsNothing(eUserD.UserName) Then Throw New Exception("登录失败,请检查用户名和密码!") Else MsgBox("登录成功,马上进入系统!") Return eUserD End If End FunctionEnd ClassD层:
Imports System.Data.SqlClient '引用命名空间Imports System.DataPublic Class UserDAO '创建数据库 Public conn As New SqlConnection("Server=(Local);Database=;User ID=sa;Password=123456") '传UserInfo实体,而不是参数UserName等,方便对实体中的参数调用 Public Function SelectUser(ByVal User As Model.UserInfo) As Model.UserInfo Dim reader As SqlDataReader '定义类型为SqlDataReader的变量reader Dim eUser As New Model.UserInfo '实例化新的UserInfo '其实下面的这段程序就相当于dim sql as string ="select ID,UserName,PWD From Users Where UserName='"User.UserName"' And PWD='"User.PWD"'" '而写成这个程序块是为了防止Sql注入,即安全性考虑。 '@UserName相当于传了一个参数,("@UserName", User.UserName)相当于给参数名字传递了参数。 Dim sql As String = "SELECT userName,Password From Login Where UserName=@UserName AND Password=@Password" Dim cmd As New SqlCommand(sql, conn) '创建sqlCommand对象 cmd.CommandText = sql '获取sql语句的具体内容 cmd.CommandType = CommandType.Text '获取上述SQL语句的具体类型,在此为Select cmd.Parameters.Add(New SqlParameter("@UserName", User.UserName)) '若用成eUser.UserName则会出现参数未传递的错误提示 cmd.Parameters.Add(New SqlParameter("@Password", User.Pwd)) conn.Open() '打开数据库连接 reader = cmd.ExecuteReader '执行查询语句,并生成一个DataReader '读取查询到的数据,并返回给相应的属性 While reader.Read '获取数据库中相应字段的数据 '数组必须从零开始读取,否则会超出其界限 eUser.UserName = reader.GetString(0) eUser.Pwd = reader.GetString(1) End While Return eUser '返回查询到的实体 conn.Close() '关闭连接 End FunctionEnd Class实体类:
Public Class UserInfo Private _username As String Public Property UserName As String Get Return _username End Get Set(value As String) _username = value End Set End Property Private _pwd As String Public Property Pwd As String Get Return _pwd End Get Set(value As String) _pwd = value End Set End PropertyEnd Class总的来说,三层架构中实体类(Entity)用于存放数据,显示层(U)用于接受用户信息和显示信息、业务逻辑层(B)用于进行业务逻辑处理、数据访问层(D)用于数据的增删改查,B是U与D的沟通桥梁。各司其职的三层需要在代码的弹跳中理解它们的相互联系,别有一番风味在心头。
0 0
- 三层演义
- AJAX演义
- UNIX演义
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 三层
- 解决matlab代码中打开摄像头错误
- windows平台编译pcre
- hdu 5053 the Sum of Cube(上海网络赛)
- 大型网站系统架构演化之路
- 色彩、印刷类重要网站
- 三层演义
- SQLite SQL语句之增删改查 详解举例
- Ubuntu下Zynq交叉编译环境的搭建
- 利用联合体完成一些数据处理的问题
- bash代码注入的安全漏洞
- 【边做项目边学Android】手机安全卫士04_01:界面(Activity)之间的切换,Activity和任务栈
- ECshop 第3方快捷登录插件(支持QQ 支付宝 微博)
- CSS 中文字体的英文名称 (simhei, simsun) 宋体 微软雅黑
- Java、C#双语版配套AES加解密示例