您的位置:首页 > 运维架构 > 网站架构

三层架构——实践篇(小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

数据模型(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



DAL分析:


   1.创建连接数据库类DoUtil,方便之后各类连接数据库调用,对今后若更换数据库提供方便。

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



BLL分析:


       创建登录类,实现登录过程的逻辑处理

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

      此项目就此完成,虽实现功能简单,但可充分体现三层架构设计的思想。将系统模块列于此:



      小结:

      三层架构用于用户业务逻辑复杂且需要存储数据的系统构建,其目的主要是降低系统之间耦合,根据各个层次之间的引用,开发者可各层关注来予以各个层次的设计,明显改善系统的可维护性,增强系统优化的目的性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐