理论与实际相结合——三层架构解析

通常在程序编程中我们所说的三层架构是指:显示层(UI)、逻辑层(BLL)和数据访问层(DAL)。对于这三层来说,分工明确,各自有各自负责的领域。

UI层:1、负责向用户显示数据  2.负责采集用户输入的信息

BLL层:1.从DAL获取数据,以供UI显示 2.从UI中获取指令或数据,经业务逻辑送达到DAL

DAL层:1.主要用于对数据源的增删改查的操作。

通过它们各自负责的领域我们可以看出,BLL层属于中间层,它负责UI和DAL层之间的通信。那么通常我们还会加入一个实体层(Enity):主要负责返回实体,在上述三层之间传递参数。

那么为什么要划分三层呢?

通过划分三层,可以使得各部分功能很好的被封装在一个包中,各自负责各自的功能,互不打扰。这符合面向对象封装的思想。使得各个模块之间达到高内聚、低耦合。以至于一个部分的更换或修改不至于影响到整个项目的实施进程。

那么这三层之间是如何进行通信的呢?

UI层引用BLL层,BLL层引用DAL层,它们三者同时都引用Enity。

可是,为什么不能循环引用(BLL引用UI,DAL引用BLL,DAL引用UI)呢?其实这就是回到了为什么要分三层,分三层是为了封装,如果继续循环引用,那么就跟分三层没有任何区别,各个参数和数据随便传递,没有界限。

在这里,我们要知道Enity是用来供三层之间相互通信,传递数据的。但是基于三层封装的思想,三层在传递参数时,传递的应该是一个实体,而不是实体中的某个参数。这个符合设计模式中的依赖倒转原则,依赖抽象而不依赖细节,其实也就是封装。

为了更清楚理解上述的这些知识。我用VB.NET做了一个三层关于登录的一个小例子:

Enity层:将程序中所要传递的参数进行声明

Public Class LoginEnity
    ''' <summary>
    ''' 用户ID
    ''' </summary>
    ''' <remarks></remarks>
    Private User_ID As Integer
    Public Property UserID() As String
        Set(value As String)
            User_ID = value
        End Set
        Get
            Return User_ID
        End Get
    End Property
    ''' <summary>
    ''' 用户名
    ''' </summary>
    ''' <remarks></remarks>
    Private User_Name As String
    Public Property UserName() As String
        Set(value As String)
            User_Name = value
        End Set
        Get
            Return User_Name
        End Get
    End Property

    ''' <summary>
    ''' 用户密码
    ''' </summary>
    ''' <remarks></remarks>
    Private _pwd As String
    Public Property Password()
        Set(value)
            _pwd = value
        End Set
        Get
            Return _pwd
        End Get
    End Property

End Class

UI层:引用BLL的业务逻辑进行显示数据

 Private Sub ButLogin_Click(sender As Object, e As EventArgs) Handles ButLogin.Click

        Dim user As New Enity.LoginEnity '实例化实体

        user.UserName = txtUserName.Text
        user.Password = txtPassword.Text

        Dim managerBLL = New BLL.LoginBLL 'UI层引用BLL层

        If managerBLL.UserIsExist(user) = True Then '利用BLL层中的函数进行逻辑判断
            frmQuery.Show()
        Else
            MessageBox.Show("登录失败!")
        End If
    End Sub

BLL层:引用DAL进行逻辑判断

 Public Function UserIsExist(ByVal user As Enity.LoginEnity) As Boolean '注意这里传递的为一个实体,而不是具体的某个参数
        Dim manager As New DAL.LoginDAL '引用DAL层,进行实例化

        Dim Euser As New Enity.LoginEnity '引用实体层
        Try
            Euser = manager.UserIsExist(user) '利用DAL中的函数进行验证

            If user.UserName = Euser.UserName And user.Password = Euser.Password Then'进行逻辑判断
                Return True
            Else
                Return False
            End If
        Catch ex As Exception '对DAL层中抛出的错误进行错误处理
            Return False

        End Try
    End Function

DAL层:主要负责对数据源中数据的增删改查等操作。

Public Function UserIsExist(ByVal user As Enity.LoginEnity) As Enity.LoginEnity ’参数传递为实体
        '进行数据库连接相关代码的编写
        Dim sqlConn = New SqlConnection(DbUtil.strConn)
        Dim cmdText As String = "select UserName,Password from User_Login where [email protected] and [email protected]"
        Dim cmd As New SqlCommand(cmdText, sqlConn)
        '添加参数
        cmd.Parameters.Add(New SqlParameter("@UserName", user.UserName))
        cmd.Parameters.Add(New SqlParameter("@Password", user.Password))

        Dim reader As SqlDataReader

        sqlConn.Open() '打开数据连接
        reader = cmd.ExecuteReader() '从数据库中读取数据
        If (Not user Is Nothing) Then

            If reader.Read() Then
                user.UserName = reader.Item("UserName")'与数据源中的数据进行验证,是否一致
                user.Password = reader.Item("Password")

            Else
                Throw New System.Exception("无记录!") '若不存在此条记录,抛出错误

            End If
        End If
        Return user

        sqlConn.Close() '关闭连接
        cmd = Nothing
    End Function

通过以上的小例子,我们可以看出,其实每一个小例子都可以由UI、BLL和DAL这三层构成。而实体层则负责数据传递,它将各个层连接成了一条线。从这种角度讲,每一个程序都是有若干条类似的线组成的。

小结:所谓三层架构,基于面向对象的思想,其实可以看做一种很常用的设计模式。不过这个设计模式是作用于整个程序的一个框架设计,它的应用更加普遍,更加宏观。而我们通常学习的设计模式则是针对于于代码中具体某个业务或是某个领域,它针对的是更加细节的地方。而三层框架的设计和设计模式的共同应用才构成了我们灵活多变的程序设计。

理论与实际相结合——三层架构解析

时间: 2024-10-13 10:47:10

理论与实际相结合——三层架构解析的相关文章

转:从web三层架构解析软件测试内容

B/S架构的系统,都会使用如下的基础软件架构: 数据访问层:实现对数据的访问功能,如增加.删除.修改.查询数据. 业务逻辑层:实现业务的具体逻辑功能,如学生入学.退学.成绩管理等. 页面显示层:将业务功能在浏览器上显示出来,如分页显示学生信息等. 在实际项目中,可能会根据情况在业务逻辑层增加层级,对于软件测试,也无非是针对这3层架构进行的测试或者测试过程中都会涉及到这3层架构. 数据访问层: 1. 常出现的问题可能是数据库字段长度不正确,导致保存的数据被截断或提示错误. 2. 写入的数据正确性.

三层架构解析

https://wenku.baidu.com/view/8db023fda0116c175f0e48df.html https://wenku.baidu.com/view/52935769a98271fe910ef99e.html https://wenku.baidu.com/view/f67e2712302b3169a45177232f60ddccda38e6a4.html?re=view https://wenku.baidu.com/view/0823f7e981c758f5f61f

三层架构—简析

三层学习完了,第一次验收的时候,自己理解的也不是很到位,后来又重新敲了一遍登陆例子,查阅了一些资料 进行第二次验收才感觉清晰了许多.之前画时序图时我就想过时序图基本上也是很好的体现了三层,当时也和别人讨 论过这个问题.直到学完三层后,更加证明了这一点. 下面我将从理论和实践两个角度总结一下三层. 理论篇 为什么使用三层架构? 说白了,分层的目的是想将复杂问题简单化,也就是面向对象技术所崇尚的"高内聚,低耦合".当业务复杂到 一定程度,数据存储在独立的存储介质时适合用三层架构. 什么是三

三层架构-------理论篇

概念: 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了"高内聚,低耦合"的思想. 各层概念 1.表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得. 2.业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理. 3.数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添.删除.修改.查找等. 注:应用三层离不开另一个重要的类:实体类,

三层架构理论总结

What? 三层架构就是将整个业务应用划分为:表示层(Presentation Layer).业务逻辑层(Business Logic Layer).数据访问层(Data Access Layer). Why? 区分层次的目的是实现"高内聚,低耦合"的思想.三层结构是软件架构设计中,最普遍的一种结构. When? 当有数据访问以及业务逻辑的时候就要考虑使用三层结构了,此三层结构是按逻辑划分的.把数据访问脱离业务单独存在,把业务脱离开界面单独存在. 当数据逻辑简单,没有数据存储层,不需要

解析三层架构

引言: 大家都很清楚,去饭店吃饭,服务员只管接待客人,出事只管烹炒客人要的美食,采购员只管按客人需求采购肉.海鲜.蔬菜,他们各司其职.共同协作为客人提供美食. 三层的特点: 我们现在讲的三层架构,就是用这样工作的,他们三者中任何依着发生变化时都不会影响到其他两者的正常工作,so体现了三层的"高内聚,低耦合"的特点. 三层具体的描述: 从图中我们可以看到三层分别为:表达层(UI.用户界面层).业务逻辑层(BLL).数据访问层(DAL).简单地说一下他们的作用:UI:为用户提供交互操作界面

三层架构理论篇

对于三层架构的理论阐述,我将从三个大的方面去讨论:what.why和how,说白了也就是以三层架构为中心,去了解什么是三层,为什么用三层以及怎么用三层这个三个问题.OK,废话不多说,进入正题. 什么是三层架构?(What) 通常多层结构的划分方式有两种:分别是物理和逻辑.物理上的三层结构是指将整个应用系统分为显示层.业务层和数据层,并且这三个层面上的实体都是硬件,比如显示层就是客户机器,业务层通常是应用程序服务器,而数据层就是数据库服务器了. 今天我们讨论的主要是逻辑上的三层架构,是在软件设计时

分享基于EF+WCF的通用三层架构及解析

本项目结合EF 4.3及WCF实现了经典三层架构,各层面向接口,WCF实现SOA,Repository封装调用,在此基础上实现了WCFContext,动态服务调用及一个分页的实例. 1. 项目架构图: 2. 项目解决方案: 在传统的三层架构上增加了WcfService(服务端),WcfClientProxy(客户端服务调用),及WcfExtension(一些扩展) 3. Wcf Service的实现: 工厂实现了RemoteServiceFactory(用于远程调用)和RefServiceFac

.NET三层架构简单解析

对于三层架构来说,主要是使用设计模式的思想,对于项目的各个模块实现"高内聚,低耦合"的思想.这里就不做详细的介绍了,如果大家有兴趣,可以阅读软件工程和设计模式相关文章. 对于三层架构来说,就是使用类,把我们在做项目的过程中,可能需要反复操作数据库,反复的使用某个方法等等,可能就是操作的参数不同.如果我们如果在每次使用的时候,都去编写相应的代码,无疑会增加程序员的负担.所以,为了增加方法的重用,就把这些能够重用的方法抽象成类,以供程序员在其它地方可以调用. 当然了,这也是面向对象的一部分