三层小结

通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。

UI的作用

(1)向用户展现特定业务数据。

(2)采集用户的输入信息和操作。

UI的设计原则

          用户至上,兼顾简洁。

UI中常用的技术

WindowsForm:Form、Control

ASP.NET:aspx、ascx、master、html

表示层(UI)主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx,如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。位于最外层(最上层),最接近用户。用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。

业务逻辑层(BLL):

BLL的作用

(1)从DAL中获取数据,以供UI显示用;

(2)从UI中获取用户指令和数据,执行业务逻辑;

(3)从UI众获取用户指令和数据,通过DAL写入数据源。

BLL的职责机制

(1)UI->BLL->UI(当业务逻辑层可以独自处理时)

(2)UI->BLL->DAL->BLL->UI(当需要数据访问的时候)

业务逻辑层(BLL)主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。

数据访问层(DAL):

数据访问层(DAL)主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务。其功能主要是负责数据库的访问,可以访问数据库系统、二进制文件、文本文档或是XML文档。简单的说就是实现对数据表的Select,Insert,Update,Delete的操作。

下面以图示的方法表示三层架构:


那么,我们为什么要使用三层呢?

区分层次的目的即为了“高内聚低耦合”的思想。高内聚,低耦合的系统有什么好处呢?事实上,短期来看,并没有很明显的好处,甚至短期内会影响系统的开发进度,因为高内聚,低耦合的系统对开发设计人员提出了更高的要求。但是,要记住,不谋万世者,不足谋一时。高内聚,低耦合的好处体现在系统持续发展的过程中,高内聚,低耦合的系统具有更好的重用性,维护性,扩展性,可以更高效的完成系统的维护开发,持续的支持业务的发展,而不会成为业务发展的障碍。世间万物,兴一利,必生一弊。要在利弊之间进行取舍。

下面是一个三层的DEMO举例:

表现层(UI):

Public Class frmLogin
    Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click

        Try
            '获得表层数据
            Dim UserName As String
            Dim Password As String
            UserName = txtUserName.Text.Trim()
            Password = txtPassword.Text

            '调用B层,做判断
            Dim mgr = New Login.BLL.LoginManager()
            Dim user = mgr.UserLogin(UserName, Password)

            '捕获异常
        Catch ex As Exception
            MsgBox(ex.Message.ToString())
        End Try

    End Sub

    Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
        Me.Close()
    End Sub
End Class
业务逻辑层(BLL):

Public Class LoginManager
    Public Function UserLogin(ByVal userName As String, ByVal password As String)

        Dim uDao = New Login.DAL.UserDAO '实例化D层中新的UserDAO对象  
        Dim user = uDao.SelectUser(userName, password)

        '判断是否查询到记录
        If user Is Nothing Then
            Throw New Exception("登录失败") '如果没有,抛出异常,显示“登陆失败”
        Else
            MsgBox("登录成功") '如果有,显示“登陆成功”
        End If

        Return user

    End Function
End Class
数据访问层(DAL):

Imports System.Data.SqlClient
Public Class UserDAO
    Public Function SelectUser(ByVal userName As String, ByVal userPassword As String)

        Dim db As New Login.DAL.DbUtil

        Using conn As New SqlConnection(db.sqlConnect)
            Dim cmd As New SqlCommand
            cmd = conn.CreateCommand()

            cmd.CommandText = "select*from T_UserInfo where userName=@userName and userPassword=@userPassword" '参数化查询
            cmd.CommandType = CommandType.Text
            cmd.Parameters.Add(New SqlParameter("@userName", userName)) '将实体给@userName
            cmd.Parameters.Add(New SqlParameter("@userPassword", userPassword)) '将实体给@userPassword

            conn.Open() '打开数据库

            Dim reader As SqlDataReader '定义读取数据表
            reader = cmd.ExecuteReader() '执行SQL查询并得到结果,返回一个SqlDataReader对象

            Dim user As Login.Model.UserInfo '实例化一个LoginModel.UserInfo
            user = Nothing

            While (reader.Read()) '读取值
                If (user Is Nothing) Then
                    user = New Login.Model.UserInfo()
                End If

                user.UserName = reader.GetString(4)
                user.Password = reader.GetString(2)

            End While

            conn.Close() '关闭连接

            Return user

        End Using
    End Function
End Class
Public Class DbUtil
    Public sqlConnect As String = "Server=.;Database=Charge;User ID=sa;Password=123456;" '连接数据库
End Class
实体层(Entity):

我的代码自己生成了。

Public Class UserInfo
    Property Password As String
    Property UserName As String
End Class

三层结构的优缺点:

优点
1、开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用。
6、结构更加的明确
7、在后期维护的时候,极大地降低了维护成本和维护时间
缺点
1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。
3、增加了开发成本。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 27
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值