zoukankan      html  css  js  c++  java
  • 三层小结

    通常意义上的三层架构就是将整个业务应用划分为:表现层(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、添加了开发成本。


  • 相关阅读:
    雅虎网站页面性能优化的34条黄金守则
    borderimage
    jQuery实现滚动加载图片效果
    mysql数据库中创建与删除数据表
    (10)一步一步开发一个简单CAD之捕捉
    apach启动失败的原因
    (12)一步一步开发一个简单CAD之观察者模式
    简单基于OPENGL的三维CAD框架(1)照相机类
    简单基于OPENGL的三维CAD框架(1)COpenGLDC
    (13)一步一步开发一个简单CAD之像皮筋类
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8733527.html
Copyright © 2011-2022 走看看