三层小结

通常意义上的三层架构就是将整个业务应用划分为:表现层(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、能够非常easy的用新的实现来替换原有层次的实现;
3、能够减少层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用。
6、结构更加的明白
7、在后期维护的时候,极大地减少了维护成本和维护时间
缺点
1、减少了系统的性能。

这是不言而喻的。

假设不採用分层式结构,非常多业务能够直接造訪数据库,以此获取对应的数据,如今却必须通过中间层来完毕。


2、有时会导致级联的改动。这样的改动尤其体如今自上而下的方向。假设在表示层中须要添加一个功能。为保证其设计符合分层式结构,可能须要在对应的业务逻辑层和数据訪问层中都添加对应的代码。
3、添加了开发成本。


posted @ 2018-04-07 15:52  zhchoutai  阅读(140)  评论(0编辑  收藏  举报