最近一直在学习三层架构,前些天同样也写了一篇同样的博客,今天主要是通过一个登录的实例给大家讲解每部分的作用和相应代码的实现。
先将实现三层架构的UML图给大家,帮助大家更好的理解三层。
1. UI作用
(1) 向用户展示特定业务数据
(2) 采集用户的输入信息和操作
(1) 向用户展示特定业务数据
(2) 采集用户的输入信息和操作
Public Class frmLogin
Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOk.Click
'定义实例
Dim en_User As New Entity.en_UserInfo
Dim bl_User As New BLL.bl_Login
'赋值
en_User.UserID = txtUserName.Text.Trim
en_User.Password = txtPassword.Text.Trim
'采集用户信息,展示登录结果
If bl_User.LoginManager(en_User) Then
MsgBox("登陆成功")
Else
MsgBox("登录失败")
End If
End Sub
Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click
Me.Close()
End Sub
End Class
2. BLL作用
(1) 从DAL获取数据,以供UI显示
(2) 从UI获取用户指令和数据,执行业务逻辑
(1) 从DAL获取数据,以供UI显示
(2) 从UI获取用户指令和数据,执行业务逻辑
(3) 从UI获取用户指令和数据,通过DAL写入数据
Imports Entity
Imports DAL.dal_Login
Public Class bl_Login
Public Function LoginManager(ByVal User As Entity.en_UserInfo) As Boolean
Dim dal_User As New DAL.dal_Login
Dim en_User As New Entity.en_UserInfo
en_User.UserID = User.UserID
'调用D层的方法
'en_User = dal_User.selectUser(en_User)
en_User = dal_User.selectUser(User)
'判断操作
If en_User.UserID.Trim = User.UserID And en_User.Password.Trim = User.Password Then
Return True
Else
Return False
End If
End Function
End Class
3. 实体(Entity)层
(1) 属于哪一层很难界定,比较倾向于业务逻辑层,也可以是数据访问层
(2) 目的:为了封装数据的,数据为了在三个层次之间流畅的流转
(3) 独立于其他三个层次的,不会引用任何的层次,其他三层都需要引用实体层
(1) 属于哪一层很难界定,比较倾向于业务逻辑层,也可以是数据访问层
(2) 目的:为了封装数据的,数据为了在三个层次之间流畅的流转
(3) 独立于其他三个层次的,不会引用任何的层次,其他三层都需要引用实体层
Imports Entity
Public Class en_UserInfo
'声明UserID属性
Private e_UserID As String
Public Property UserID As String
Get
Return e_UserID
End Get
Set(ByVal value As String)
e_UserID = value
End Set
End Property
'声明Password属性
Private e_Password As String
Public Property Password As String
Get
Return e_Password
End Get
Set(ByVal value As String)
e_Password = value
End Set
End Property
End Class
4. DAL层
作用主要是与操作数据库
(1) 从数据源加载数据(select)
(2) 向数据源写入数据(insert/update)
(3) 从数据源删除数据(delete)
Imports Entity
Imports System.Data.SqlClient
Imports System.Data
Public Class dal_Login
'连接数据库
Dim strConn As String = "server =192.168.24.59;database=Login;uid=sa;pwd=123456"
Dim sqlConnect As SqlConnection = New SqlConnection(strConn)
'自定义检查参数
Function selectUser(ByVal User As Entity.en_UserInfo) As Entity.en_UserInfo
Dim read As SqlDataReader
Dim en_User As New Entity.en_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 UserID,Password From UserInfo Where UserID=@UserID And Password=@Password"
Dim sqlCmd As SqlCommand = New SqlCommand(sql, sqlConnect) '创建sqlCommand对象
'Dim UserDataTable As New DataTable '定义一个DataTable对象
sqlCmd.CommandText = sql '获取SQL语句的具体内容
sqlCmd.CommandType = CommandType.Text '获取上述SQL语句的具体类型,在此为Select
sqlCmd.Parameters.Add(New SqlParameter("@UserID", User.UserID)) '若用成eUser.UserName则会出现参数未传递的错误提示
sqlCmd.Parameters.Add(New SqlParameter("@Password", User.Password))
sqlConnect.Open()
read = sqlCmd.ExecuteReader() '执行查询语句,并生成一个DataReader
read.Read()
'读取查询到的数据,并返回给相应的属性
While read.Read() '获取数据库中相应字段的数据
'数组必须从零开始读取,否则会超出其界限
User.UserID = read.GetString(0)
User.Password = read.GetString(1)
End While
'如果用户存在的话,将数据库表中检索的记录对应赋值给参数
'User.UserID = read.Item("UserID")
'User.Password = read.Item("Password")
Return User '返回查询到的实体
sqlConnect.Close()
End Function
End Class
相关推荐
14.4 实现基于工厂模式的三层架构 512 14.4.1 扩展新增数据访问层 512 14.4.2 IDAL抽象接口的实现 513 14.4.3 创建DAL对象的封装 517 14.4.4 实现抽象工厂模式 519 14.4.5 工厂模式的三层架构图 521 本章常见技术...
第14章 三层架构项目开发 第15章 大型网站的性能优化与安全 第16章 系统设计的原则和技巧 第3篇 项目实战解析 第17章 权限角色管理项目解析 第18章 单点登录系统的设计与实现 第19章 常用.net开发...
- 分离关注点:项目可能采用三层架构(表现层、业务逻辑层、数据访问层),将用户界面、业务规则和数据访问分开,提高代码的可维护性和可扩展性。 - 服务接口:业务逻辑层可能通过接口与表现层交互,实现松耦合。 ...
14.4 实现基于工厂模式的三层架构 512 14.4.1 扩展新增数据访问层 512 14.4.2 IDAL抽象接口的实现 513 14.4.3 创建DAL对象的封装 517 14.4.4 实现抽象工厂模式 519 14.4.5 工厂模式的三层架构图 521 本章常见技术...
《亮剑.NET:.NET深入体验与实战精要》作者身为从事.NET一线开发的资深开发专家,常年耕耘技术博客,惠及无数.NET新知。此次将长期的思考、感悟,多年的系统开发、设计和团队管理经验,以及深入分析众多项目实战的...
《亮剑.NET:.NET深入体验与实战精要》作者身为从事.NET一线开发的资深开发专家,常年耕耘技术博客,惠及无数.NET新知。此次将长期的思考、感悟,多年的系统开发、设计和团队管理经验,以及深入分析众多项目实战的...
《亮剑.NET:.NET深入体验与实战精要》作者身为从事.NET一线开发的资深开发专家,常年耕耘技术博客,惠及无数.NET新知。此次将长期的思考、感悟,多年的系统开发、设计和团队管理经验,以及深入分析众多项目实战的...
《亮剑.NET:.NET深入体验与实战精要》作者身为从事.NET一线开发的资深开发专家,常年耕耘技术博客,惠及无数.NET新知。此次将长期的思考、感悟,多年的系统开发、设计和团队管理经验,以及深入分析众多项目实战的...
《亮剑.NET:.NET深入体验与实战精要》作者身为从事.NET一线开发的资深开发专家,常年耕耘技术博客,惠及无数.NET新知。此次将长期的思考、感悟,多年的系统开发、设计和团队管理经验,以及深入分析众多项目实战的...
《亮剑.NET:.NET深入体验与实战精要》作者身为从事.NET一线开发的资深开发专家,常年耕耘技术博客,惠及无数.NET新知。此次将长期的思考、感悟,多年的系统开发、设计和团队管理经验,以及深入分析众多项目实战的...
第14章 三层架构项目开发 第15章 大型网站的性能优化与安全 第16章 系统设计的原则和技巧 第3篇 项目实战解析 第17章 权限角色管理项目解析 第18章 单点登录系统的设计与实现 第19章 常用.net开发...
第14章 三层架构项目开发 第15章 大型网站的性能优化与安全 第16章 系统设计的原则和技巧 第3篇 项目实战解析 第17章 权限角色管理项目解析 第18章 单点登录系统的设计与实现 第19章 常用.net开发...
第14章 三层架构项目开发 第15章 大型网站的性能优化与安全 第16章 系统设计的原则和技巧 第3篇 项目实战解析 第17章 权限角色管理项目解析 第18章 单点登录系统的设计与实现 第19章 常用.net开发...