三层架构——实践篇(小Demo,大道理)
2013-01-27 17:24
375 查看
上篇说道三层的基础理论知识,这里将以一个小的登录Demo来进行实践练习。
应用原则:DAL、UI不包含任何业务逻辑处理。
BLL通过UI传来的指令,决定执行业务逻辑,需访问数据源时交DAL处理。完成后返回数据给UI。
DAL/UI/BLL应在不同Assembly中,开放扩展、关闭修改。
实现功能:利用三层架构实现简单的用户登录,并对登录成功的用户设置增加积分的功能。
实现语言:VB.NET
建立数据库Login: 该实例仅用到两个表
表Users,包含字段:ID、Username、Password、Email
表Scores,包含字段:ID、Username、Score
DAL分析:
1.创建连接数据库类DoUtil,方便之后各类连接数据库调用,对今后若更换数据库提供方便。
BLL分析:
创建登录类,实现登录过程的逻辑处理
2.编写登录事件代码
此项目就此完成,虽实现功能简单,但可充分体现三层架构设计的思想。将系统模块列于此:
应用原则:DAL、UI不包含任何业务逻辑处理。
BLL通过UI传来的指令,决定执行业务逻辑,需访问数据源时交DAL处理。完成后返回数据给UI。
DAL/UI/BLL应在不同Assembly中,开放扩展、关闭修改。
实现功能:利用三层架构实现简单的用户登录,并对登录成功的用户设置增加积分的功能。
实现语言:VB.NET
建立数据库Login: 该实例仅用到两个表
表Users,包含字段:ID、Username、Password、Email
表Scores,包含字段:ID、Username、Score
数据模型(Data Model)
创建LoginModel程序集,创建封装用户信息数据类,该类不属于特定层次,而是专用于封装数据,方便各层访问。UserInfo类封装表Users返回的各字段,该程序集被各层次引用,但哪个层次都不引用。Public Class UserInfo Private _ID As String Private _Username As String Private _Password As String Private _Email As String Public Property ID As Integer '属性ID Get Return _ID End Get Set(value As Integer) _ID = value End Set End Property Public Property Username As String '属性Username Get Return _Username End Get Set(value As String) _Username = value End Set End Property Public Property Password As String '属性Password Get Return _Password End Get Set(value As String) _Password = value End Set End Property Public Property Email As String '属性Email Get Return _Email End Get Set(value As String) _Email = value End Set End Property End Class
Public Class DoUtil Public Shared Function connstring() As String connstring = "Server=计算机名;Database=Login;User ID=sa;Password=123456" End Function End Class
2.创建数据访问对象UserDAO,访问表Users,返回符合条件调用。
Public Class UserDAO '定义选择用户函数,按传入参数返回Users表中指定记录 Public Function SelectUser(ByVal userName As String, ByVal password As String) As LoginModel.UserInfo Dim con As SqlClient.SqlConnection Dim cmd As SqlClient.SqlCommand con = New SqlClient.SqlConnection(DoUtil.connstring()) '连接数据库 cmd = con.CreateCommand() '根据用户名和密码选中记录内容 cmd.CommandText = "select ID,Username,Password,Email from Users Where Username=@userName and Password=@password" cmd.CommandType = CommandType.Text '添加命令参数 cmd.Parameters.Add(New SqlClient.SqlParameter("@userName", userName)) cmd.Parameters.Add(New SqlClient.SqlParameter("@Password", password)) con.Open() '打开连接 Dim reader As SqlClient.SqlDataReader reader = cmd.ExecuteReader() '执行查询 Dim user As LoginModel.UserInfo user = Nothing While (reader.Read()) '读取字段 If user Is Nothing Then user = New LoginModel.UserInfo End If user.ID = reader.GetInt32(0) user.Username = reader.GetString(1) user.Password = reader.GetString(2) If (Not reader.IsDBNull(3)) Then user.Email = reader.GetString(3) End If End While Return user '返回查询结果 End Function End Class
3.创建数据库访问对象ScoreDAO,访问表Scores,对于登录成功的用户插入分数记录。
Public Class ScoreDAO Public Sub UpdateScore(ByVal Username As String, value As Integer) Dim conn As SqlClient.SqlConnection Dim cmd As SqlClient.SqlCommand conn = New SqlClient.SqlConnection(DoUtil.connstring) '连接数据库 cmd = conn.CreateCommand() '创建插入命令 cmd.CommandText = "Insert INTO Scores(Username,Score) Values (@Username,@Score)" '插入字符串 cmd.Parameters.Add(New SqlClient.SqlParameter("@Username", Username)) '创建参数Username cmd.Parameters.Add(New SqlClient.SqlParameter("@Score", value)) '创建参数value conn.Open() '打开连接 cmd.ExecuteNonQuery() '执行插入命令 conn.Close() End Sub End Class
Public Class LoginService Public Function userlogin(Username As String, Password As String) As LoginModel.UserInfo '定义登录函数,返回UserInfo类 Dim uDao As New Login.DAL.UserDAO '引用DAL层,声明必要类 Dim user As New LoginModel.UserInfo Dim sDao As New Login.DAL.ScoreDAO user = uDao.SelectUser(Username, Password) '根据参数确定返回值 If (user Is Nothing) Then '返回Nothing处理 Throw New Exception("登录失败。") Else '登录成功,插入10至分数字段并返回UserInfo类 sDao.UpdateScore(Username, 10) Return user End If End Function End Class
UI分析:
1.创建系统登录界面
2.编写登录事件代码
Public Class frmLogin Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click Dim username As String Dim password As String username = txtUsername.Text '根据用户输入,引入参数 password = txtPassword.Text Dim ser = New Login.BLL.LoginService '引用BLL层,执行登录逻辑处理 Dim user = ser.userlogin(username, password) MessageBox.Show("登录用户:" + username) End Sub End Class
此项目就此完成,虽实现功能简单,但可充分体现三层架构设计的思想。将系统模块列于此:
小结:
三层架构用于用户业务逻辑复杂且需要存储数据的系统构建,其目的主要是降低系统之间耦合,根据各个层次之间的引用,开发者可各层关注来予以各个层次的设计,明显改善系统的可维护性,增强系统优化的目的性。相关文章推荐
- [转]Spring.NET企业架构实践之 NHibernate + Spring.NET + WCF + Windows服务 + Silverlight 中小企业应用架构完整Demo
- 三层架构-----实践篇
- 三层架构demo
- 三层架构——实践篇(二)
- .NET应用架构设计—面向查询的领域驱动设计实践(调整传统三层架构,外加维护型的业务开关)
- MVC项目实践,在三层架构下实现SportsStore-10,连接字符串的加密和解密
- .NET应用架构设计―面向查询的领域驱动设计实践(调整传统三层架构,外加维护型的业务开关)
- DataRabbit 企业级数据访问框架(21)-- DataRabbit 4.0 & DataRabbit 与三层架构融合Demo源码
- Spring.NET企业架构实践之 NHibernate + Spring.NET + WCF + Windows服务 + Silverlight 中小企业应用架构完整Demo
- .NET应用架构设计—面向查询的领域驱动设计实践(调整传统三层架构,外加维护型的业务开关)
- MVC项目实践,在三层架构下实现SportsStore-02,DbSession层、BLL层
- MVC项目实践,在三层架构下实现SportsStore-07,实现订单提交
- 三层架构--理论与实践
- Spring.NET企业架构实践之 NHibernate + Spring.NET + WCF + Windows服务 + Silverlight 中小企业应用架构完整Demo
- MVC项目实践,在三层架构下实现SportsStore-05,实现导航
- MVC项目实践,在三层架构下实现SportsStore-11,使用Knockout实现增删改查
- 三层架构--实践篇(转载)
- Spring.NET企业架构实践之 NHibernate + Spring.NET + WCF + Windows服务 + Silverlight 中小企业应用架构完整Demo
- DataRabbit 企业级数据访问框架(21)-- DataRabbit 4.0 & DataRabbit 与三层架构融合Demo源码
- 三层架构-----实践篇