层,百度百科这样解释,首先-重叠起来的东西;重叠起来的东西中的一部分:层次|表层|大气层。其次-重叠。反复:层峦叠嶂|层出不穷。最后-量词,用于能够分出层次的事物。女孩儿强烈的第六感,三层中的层一定是第三个意思,三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据訪问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。

接下来,以登录为例。结合分层,总结一下在这个小样例中的所思所想。首先,来看一下,数据在三层中的一个详细走向,各层之间关系例如以下所看到的:

首先,我们须要知道各个层之间的引用关系。U层直接引用B层,间接引用D层;B层引用D层,D层不须要引用U层和D层,三层均须要引用实体层。明明说好的三层为什么另一个实体层呢?这里简单说一下,实体类。也就是把数据库表的字段映射为你的对象的各个属性。

如我们如今敲得登录实例,User这张表,里面有ID,UserName,Password,等属性,我就须要在实体里面新建一个类。给她这几个属性,然后在和数据表字段映射。

在各层之间起到了一个传输数据的桥梁作用,她在三层架构中是可有可无的,她事实上就是面向对象编程中最主要的东西--类。一个桌子是一个类,一条新闻也是一个类。int,string,double等也是类,所以,model不过一个类。这样,Model在三层架构中的位置,和int,string等变量的地位就一样了,没有其它的目的,仅用于数据的存储而已,只不过她存储的是复杂的数据。所以假设我们的项目中对象都很easy。那么就不用Model而直接传递多个參数也能做成三层架构,那么为什么要须要Model呢?她的优点是什么呢?Model在各层參数传递时究竟能起到什么作用?例如以下:在各层间传递參数时,能够是这样:
                       AddUser(userID,userName,userPassword),

也能够是样:AddUser(userInfo)

这两种方法那个好?一目了然,肯定是另外一种要好非常多,那么什么时候用普通变量类型(int,string。double)在各层之间传递參数,什么时候用Model传递,例如以下:

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">   SelectUser(int UserId)
SelectUserByName(string username)
SelectUserByName(string username,string password)
SelectUserByEmail(string email)
SelectUserByEmail(string email,string password)</span></span></span></span></span>

能够概括为

       SelectUser(userId)

       SelectUser(user)

       这里用user这个Model对象囊括了username,password,email这三个參数的四种组合模式。

UserId事实上也能够合并到user中。但项目中其他BLL都实现了带有id參数的接口,所以这里也保留这一项。   传入了userInfo,那怎样处理呢,这个就须要依照先后的顺序了,有详细代码决定。这里按这个顺序处理首先看是否同一时候具有username和password。然后看是否同一时候具有email和password。然后看是否有username。然后看是否有email。依次处理。这样。假设以后添加一个新内容,会员卡(number),则无需更改接口,仅仅要在DAL的代码中添加对number的支持即可。然后前台添加会员卡一项内容的表现与处理即可。

理论知识了解了,还须要在项目中历练,接下来,以一个简单的登录为例,先看看我们的类图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDg1MDAyNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

依据我们上述的UML图。看一下,我们三层架构是怎样构建的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDg1MDAyNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

接下来U层,她的作用是向用户展现特定业务数据,採集用户的输入信息和操作,原则:用户至上,兼顾简洁,代码实现:

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">Public Class Form1
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
Me.Close()
End Sub Private Sub BtnOK_Click(sender As Object, e As EventArgs) Handles BtnOK.Click
Try
Dim eUser2 As New Model.Login '实例化新的UserInfo,用来传递B层的实体
Dim eUser3 As Model.Login '定义一个类型为Userinfo的參数。用来赋值
eUser2.UserName = txtUserName.Text.Trim '将username传给实体层的UserName
eUser2.Pwd = txtpassword.Text.Trim '将密码传给实体层的UserName '调用B层,登录推断
Dim mgr As New BLL.LoginManager
eUser3 = mgr.UserLogin(eUser2) Catch ex As Exception
MessageBox.Show(ex.Message.ToString())
End Try
End Sub
End Class</span></span></span></span></span>

接下来。B层。她的作用有三个首先从DAL获取数据,提供UI显示。其次UI获取用户和指令,运行业务逻辑;最后UI获取用户和指令,通过DAL写入数据,代码实现:

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">Public Class LoginManager
Public Function UserLogin(ByVal User As Model.Login) As Model.Login
Dim uDao As New DAL.UserDAO '实例化D层中新的UserDAO对象
Dim eUser1 As Model.Login '定义一个类型为实体层UserInfo的參数,用于赋值
eUser1 = uDao.SelectUser(User) '推断是否查询到记录,若有。登录成功。并返回实体User1
If IsNothing(eUser1.UserName) Then
Throw New Exception("登录失败,请检查username和password!")
Else
MsgBox("登录成功。立即进入系统!")
Return eUser1
End If
End Function
End Class</span></span></span></span></span>

数据訪问层。也就是D层,她的作用是从数据源载入数据;向数据源写入数据。从数据源删除数据,代码实现:

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">Imports System.Data
Imports System.Data.SqlClient
Imports Model Public Class UserDAO
Public conn As New SqlConnection("Server=(Local);Database=jin;User ID = sa;Password=123456") '创建数据库连接
Public Function SelectUser(ByVal User As Login) As Model.Login '传实体UserInfo,而不是參数UserName,ID等。这样可方便对实体中的參数进行调用
Dim reader As SqlDataReader '定义类型为SqlDataReader的变量reader
Dim eUser As New Model.Login '实例化新的UserInfo Dim sql As String = "SELECT UserName,PWD From Login Where UserName =@UserName And PWD=@PWD"
Dim cmd As New SqlCommand(sql, conn) '创建sqlcommand对象
cmd.CommandText = sql '获取sql语句的详细内容
cmd.CommandType = CommandType.Text '获取上述sql语句的详细类型
cmd.Parameters.Add(New SqlParameter("@UserName", User.UserName))
cmd.Parameters.Add(New SqlParameter("@PWD", 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 Function End Class</span></span></span></span></span>

最后,实体层:

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">Public Class Login
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 Property
End Class
</span></span></span></span></span>

至此。三层登录,net版本号的样例就实现了。执行效果例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDg1MDAyNw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

在敲样例的过程中遇见了非常多错,比方无法启动带有“类库输出类型”的项目;程序不包括适合CSC于入口点的静态Main方法;未处理InvalidOperationExcetion;通过上网查资料,寻求帮助,一一解决。在这个过程中一点一点的积累。

小小的登录窗体。开启大大的世界......

三层登录实例VB.NET版具体解释---理论加实战篇的更多相关文章

  1. 三层登录实例VB.NET版详解---理论加实战篇

    层,百度百科这样解释,首先-重叠起来的东西:重叠起来的东西中的一部分:层次|表层|大气层.其次-重叠:重复:层峦叠嶂|层出不穷.最后-量词,用于可以分出层次的事物,女孩儿强烈的第六感,三层中的层一定是 ...

  2. 三层架构实例 VB.NET版

    三层实例 首先发现感慨,对于三成这块,用到都是一些面向对象的特征,尤其是对象的实例化.如果你不是很注意的话,那么,你就会一头雾水,就像我一样,慢慢的雾里看花,最后也是走出来的,不过用的事件是相当的. ...

  3. 三层登录——VB.NET版

    前言 由于下面的机房收费系统重构自己要用VB.NET进行重构,所以在敲三层登录的时候,实践了一份C#版三层登录,接着就是VB.NET版的三层登录.话说还有七层登录,一下子感觉三层又矮小了.万丈高楼平地 ...

  4. 三层登录——C#版

    前言 前期了解三层架构主要是由UI层.BLL层和DAL层三部分构成.看到大牛们都采用三层的思想实现了登录,本菜鸟暗暗地站在了他们的肩膀上. 自己理解 对于三层自己的理解是:就像我们对一个大型的公司去找 ...

  5. 三层——vb.net版

    经过不懈的努力,我的vb.net 版的三层登陆终于实现了.下面将我的成果向大家展示一下. 原则          vb.net的三层登陆跟C#的三层登陆的思想是一样的都是将系统分层--U层只负责与用户 ...

  6. SSO之CAS单点登录实例演示

    本文目录: 一.概述 二.演示环境 三.JDK安装配置 四.安全证书配置 五.部署CAS-Server相关的Tomcat 六.部署CAS-Client相关的Tomcat 七. 测试验证SSO 一.概述 ...

  7. VB.NET版机房收费系统---导出Excel表格

    datagridview,翻译成中文的意思是数据表格显示,使用DataGridView控件,能够显示和编辑来自不同类型的数据源的表格,将数据绑定到DataGridView控件很easy和直观,大多数情 ...

  8. 基于Servlet的MVC模式用户登录实例

    关于MVC模式的简单解释 M Model,模型层,例如登录实例中,用于处理登录操作的类: V View,视图层,用于展示以及与用户交互.使用html.js.css.jsp.jQuery等前端技术实现: ...

  9. 三层登录—c#

    学习了三层,有一个登录窗口的小练习.是我们第一次接触三层的初战.如今仅仅是简单的了解了一些,须要学习的还有非常多,以下浅谈自己的理解. 我们说的三层就是分层了显示层.业务逻辑层和数据訪问层.当中显示层 ...

随机推荐

  1. symbol(s) not found for architecture arm64

    问题如下:       解决:更改环境 ok   Standard architectures (armv7, arm7s)

  2. SQL Server 2008 R2 Build List

    By Steve Jones, 2014/09/30 (first published: 2010/05/25) This is a list of the builds for SQL Server ...

  3. Winform打砖块游戏制作step by step第4节---小球移动

    一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 预备知识,无GDI画图基础的童鞋请先阅读一篇文章让你彻底弄懂WinFor ...

  4. linux命令详解:jobs命令

    转:http://www.cnblogs.com/lwgdream/p/3413571.html 前言 我们可以将一个程序放到后台执行,这样它就不占用当前终端,我们可以做其他事情.而jobs命令用来查 ...

  5. iOS教程:如何使用NSFetchedResultsController

    不知不觉我们已经来到了Core Data系列教程的最后一部分了,在这里我们要讨论如何使用NSFetchedResultsController来优化我们的应用,提高应用的运行速度,减少其内存占用. 你是 ...

  6. 【spring Boot】Spring中@Controller和@RestController之间的区别

    spring Boot入手的第一天,看到例子中的@RestController ............. 相同点:都是用来表示Spring某个类的是否可以接收HTTP请求 不同点:@Controll ...

  7. Solr 配置文件之schema.xml

    schema.xml这个配置文件的根本目的是为了通过配置告诉Solr怎样建立索引. solr的数据结构例如以下: document:一个文档.一条记录 field:域.属性 solr通过搜索某个或某些 ...

  8. Android官方SwipeRefreshLayout

    App基本都有下拉刷新的功能,以前基本都使用PullToRefresh或者自己写一个下拉刷新,Google提供了一个官方的下拉刷新控件SwipeRefreshLayout,简单高效,满足一般需求足够了 ...

  9. MySQL5.7 基于二进制包的安装

    1.MySQL5.7安装注意事项 1.在MySQL5.7中mysql_install_db已经不再推荐使用,建议改成mysqld-initialize 完成实力初始化.(mysql_install_d ...

  10. laravel性能优化技巧(转)

    说明 性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践,还有调优技巧,大家有别的建议也欢迎留言讨论. 这里是简单的列表 ...