vb.net小试三层架构
在对三层架构有了初步了解后,用vb.net做了一个小的程序,真的很小,仅仅是为了体现一下三层之间机制。下面是我设计的操作界面:
还有程序集和类的分布情况,
接下来是数据的设计,数据库用到的是SQL Server2008
三层架构,用简单的话来概括说就是:.U层传入UI命令和参数,然后调用B层的业务逻辑,B层中业务逻辑要用到的数据是通过调用D层访问数据库来完成.通过这样的调用,D层的检索结果返给B层,B层通过业务逻辑加工、判断、处理数据,最后将处理结果返给UI层。
程序的功能包括对表中信息的增删改查,因为都展示出来篇幅过长,就选择其中添加的功能来进行阐述。接下来看代码是怎么体现出来的。
先看一下U层是怎么来引用B层的
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click '添加按钮
Dim ADDStu As New StuBLL.ManageBLL '实例化B层的类ManageBLL,实现对B层的引用
Dim Ustudent As New StuEntity.StudentEntity '实例化实体层类StudentEntity,方便存储参数
'对文本框的输入做限制
If Trim(txtID.Text) = "" Or IsNumeric(Trim(txtID.Text)) = False Then
MessageBox.Show("请输入合适学号,再进行该操作")
Exit Sub
End If
If Trim(txtName.Text) = "" Then
MessageBox.Show("请输入姓名,再进行该操作")
Exit Sub
End If
If Trim(txtTel.Text) = "" Or IsNumeric(Trim(txtTel.Text)) = False Then
MessageBox.Show("请输入联系电话,再进行该操作")
Exit Sub
End If
'给实体类的属性赋值
Ustudent.StuID = CInt((txtID.Text))
Ustudent.StuMarks = Trim(CStr(txtName.Text))
Ustudent.StuTel = CDec(txtTel.Text)
'调用类方法 AddStuManager 并报告
If ADDStu.AddStuManager(Ustudent) Then
MessageBox.Show("添加成功,请刷新")
Else
MessageBox.Show("该学号已添加,请重新添加") End If End Sub
通过上面的代码,知道U层实例化B层的类ManageBLL 调用了它的AddStuManager方法 完成了给操作,它就是这样引用了B层。
接下看看,它所引用的B层是如何构建并实现的:
Imports StuDAL
Imports StuEntity
Public Class ManageBLL
Public Function AddStuManager(ByVal stuInfoEn As StuEntity.StudentEntity) As Boolean '判断可否插入信息,并返回布尔值
Dim Controller As New StuDAL.SqlDAL '实例化D层类sqlDAL,完成对D层的引用
Dim StuInfo As New StuEntity.StudentEntity '引用实体类,以便储存一定的参数 If Controller.IsExist(stuInfoEn) = True Then '根据ID判断该条记录是否已经存在,若存在返回False
Return False
Else '若不存在,执行添加的方法,并返回True
Controller.AddStu(stuInfoEn)
Return True
End If
End Function
End Class
其实B层发挥的作用其实很大,对数据加工在上面的代码中没有很好的体现,只是对D层返回的数据进行了简单的判断。这里B层实例化了D层中的类sqlDAL ,调用了它的IsExit()和AddStu()方法,就这样引用了D层,完成了自己的业务逻辑。
无论B层的逻辑简单还是复杂,都妨碍不了D层,它只专注与对数据库数据的操作。
Imports StuEntity
Public Class SqlDAL
Public Function AddStu(ByVal stuinfoen As StuEntity.StudentEntity) As Boolean '根据传入的参数StudentEntity,执行 数据库 插入命令 并返回布尔值 Dim con As SqlClient.SqlConnection
Dim cmd As SqlClient.SqlCommand
Dim intResult As Integer con = New SqlClient.SqlConnection(ContactDAL.SqlString()) ‘建立对数据库的连接
cmd = con.CreateCommand() cmd.CommandText = "insert into T_Names (ID,Name,Tel) values (" & stuinfoen.StuID & ",'" & stuinfoen.StuMarks & "'," & stuinfoen.StuTel & ")" ’对数据中数据操作的具体SQL语句
cmd.CommandType = CommandType.Text
con.Open() ‘打开对数据库的连接
intResult = cmd.ExecuteNonQuery() ,执行SQl语句,并返回执行结果
If intResult < 0 Then ,如果操作成功,则返回True,失败则返回False
Return True
Else
Return False
End If
con.Close() ’关闭连接,
con = Nothing ,清楚存储
End Function
Public Function IsExist(ByVal stuinfoen As StuEntity.StudentEntity) As Boolean '根据传入的参数StudentEntity,执行数据查询命令,检查是否有要检索的内容
Dim con As SqlClient.SqlConnection = New SqlClient.SqlConnection(ContactDAL.SqlString())
Dim cmd As SqlClient.SqlCommand
Dim dalReader As SqlClient.SqlDataReader cmd = con.CreateCommand
cmd.CommandText = "select *from T_Names where ID='" & stuinfoen.StuID & "'"
cmd.CommandType = CommandType.Text
con.Open()
dalReader = cmd.ExecuteReader() If dalReader.HasRows = True Then
Return True
Else
Return False
End If
con.Close()
con = Nothing
End Function
End Class
三层之间U层引用B层,B层引用D层这样一个机制就这样构成了。
这里不得不再提一下这个实体层StuEntity,它存在于三层架构之外,但它的存在大大帮助了三层的实现,因为在层与层之间的调用上需要传递一些参数,实体类恰好就是这样一个装载参数的容器。通过上面的代码也可以看出,三个层中都引用到了实体类,而且主要用于储存和传递参数。以下是实体层的构建:
'定义实体类,存储数据表T_Names中的数据
Public Class StudentEntity '声明私有字段
Private _StuID As Integer
Private _StuMark As String
Private _StuTel As Integer Property StuID As Integer '定义StuId属性
Get
Return _StuID
End Get
Set(value As Integer)
_StuID = value
End Set
End Property
Property StuMarks As String '定义StuMarks属性
Get
Return _StuMark
End Get
Set(value As String)
_StuMark = value
End Set
End Property
Property StuTel As Integer '定义StuTel属性
Get
Return _StuTel
End Get
Set(value As Integer)
_StuTel = value
End Set
End Property
End Class
这是我对三层的理解,这个小例子的制作让我对三层有了进一步的了解,其中还有些偏差,还望各位读者多多指出,相互交流,共同进步。
vb.net小试三层架构的更多相关文章
- 微软代码示例:ASP.NET 2.0 三层架构应用程序教程系列
本文转自:http://www.codeusing.com/hi/uephee.wen/resource/view/170.aspx 资源分类:微软代码示例 更新日期:20 ...
- asp.net三层架构 及其中使用泛型获取实体数据介绍
asp.net中使用泛型获取实体数据可以发挥更高的效率,代码简洁方便,本例采用三层架构.首先在model层中定义StuInfo实体,然后在 DAL层的SQLHelper数据操作类中定义list< ...
- 关于三层架构与MVC的一些理解
刚毕业的时候,参与了一个上位机的系统开发.上位机所使用的是.net Windows Form技术. 当时,和一个北理的姑娘在一个项目组里.因为她来公司时间比较长,而且经验比较丰富,所以,上位机的架构由 ...
- 架构和模式的区别:三层架构和MVC在应用开发中的位置
架构是系统层面的,可以是多层架构,也可以是事件驱动架构,也可以是微服务架构. 模式是GUI应用的一种职责分离设计. 三层架构(包含多层架构)和 MVC模式(包含MVP, MVVM) 没什么关系,它们不 ...
- 从零开始编写自己的C#框架(5)——三层架构介绍
三层架构对于开发人员来说,已经是司空见惯了,除了大型与超小型项目外,大多都是这种架构来进行开发. 在这里为初学者们简单介绍一下三层架构: (下面内容摘自<趣味理解:三层架构与养猪—<.NE ...
- 【转】浅谈MVC与三层架构
首先给大家引入下MVC的概念: MVC(Model View Controller)模型.视图以及控制器,它是一种较为广泛应用的结构设计模式. 模型:就是在MVC设计模式中需要被显示的数据.在通常情况 ...
- 有了门面,程序会更加体面!- pos软件基于三层架构 -09
续上篇) 大鸟说道:“实际上没有学过设计模式去理解三层架构会有失偏颇的,毕竟分层是更高一级别的模式,所谓的架构模式.不过在程序中,有意识的遵循设计原则,却也可以有效的做出好的设计.” ...
- 三层架构 与 MVC那点事儿
以下为转载内容: 地址 MVC与三层架构的异同点 首先先解释一下MVC. V即View.是视图的意思. C即Controler.是控制器的意思. M即Model,是模型的意思. 这三个里.最不容易理解 ...
- JDBC三层架构
三层框架: 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了“高内聚,低耦合”的思想. 原理:1:数据访问层:主要是对原始 ...
随机推荐
- hihoCoder #1870 : Jin Yong’s Wukong Ranking List-闭包传递(递归) (ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction A) 2018 ICPC 北京区域赛现场赛A
P1 : Jin Yong’s Wukong Ranking List Time Limit:1000ms Case Time Limit:1000ms Memory Limit:512MB Desc ...
- 17-7-24-react入门
先说明下为什么说好每天一更,周五周六周日都没有更新.因为在周五的时候,上司主动找我谈了转正后的工资4-4.5K.本来想好是6K的,后来打听了一圈公司的小伙伴,都是5-5.5,我就把自己定到了5K.万万 ...
- 字典树&01字典树算法笔记
1]学习了字典树之后,觉得它很明显的就是用空间来换时间,空间复杂度特别大,比如字典数单单存26个小写字母,那么每个节点的孩子节点都有26个孩子节点,字典树中的每一层都保留着不同单词的相同字母. 2]0 ...
- shell 倒引号
`command` 倒引号 (backticks) 在前面的单双引号,括住的是字串,但如果该字串是一列命令列,会怎样?答案是不会执行.要处理这种情况,我们得用倒单引号来做. fdv=`date +%F ...
- ansible用playbook实现定期监控各机器磁盘和进程状态
目标:用ansible定期监控各机器的磁盘空间状况 和进程运行状况 1)配置playbook脚本,实现对磁盘空间 和 特定进程运行状态的每日检查: 2)通过邮件插件,把检测结果发到ops邮箱: 一.p ...
- [BZOJ3566][SHOI2014]概率充电器(概率DP)
题意:树上每个点有概率有电,每条边有概率导电,求每个点能被通到电的概率. 较为套路但不好想的概率DP. 树形DP肯定先只考虑子树,自然的想法是f[i]表示i在只考虑i子树时,能有电的概率,但发现无法转 ...
- [BZOJ4824][CQOI2017]老C的键盘(树形DP)
4824: [Cqoi2017]老C的键盘 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 193 Solved: 149[Submit][Statu ...
- [SimpleOJ239]Cards
题目大意: 有n(n为偶数)张牌,每张牌正反面有两张数字,你可以从中选出n/2张牌,减去某一面的数字,再选出另外n/2张牌,加上某一面的数字,问最终的答案最小能是多少? 思路: 先不考虑n/2的限制, ...
- 一个简单的Spring程序
首先,要用Eclipse开发Spring程序,需要安装Spring插件并重启Eclipse 具体操作: 新建java Project后,导入需要使用的包(提前下好Spring),Spring包包含6个 ...
- 浙南联合训练赛 D - Broken Clock
You are given a broken clock. You know, that it is supposed to show time in 12- or 24-hours HH:MM fo ...