引言

经典三层架构是分层架构中最原始最典型的分层模式,其他分层架构都是其变种或扩展,例如阿里的四层架构模式和DDD领域驱动模型。阿里的 四层架构模型在三层基础上增加了 Manager 层,从而形成变种四层模型;DDD架构则在顶层用户界面层与业务逻辑层之间引入应用层,从而形成变种DDD领域驱动模型;具体可参考《系统架构:分层架构》。

架构理念

三层架构基于“高内聚,低耦合”的思想,把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。三层架构如图一所示。

图一 三层构架

表示层(UI) 位于三层构架的最上层。与用户直接接触,实现系统与用户直接的交换,以及消息事件的处理。UI层调用业务逻辑层BLL相关接口完成业务操作。

业务逻辑层(BLL),实现数据处理和数据传递,将界面表示层和数据访问层连接起来,起到承上启下的作用。

数据访问层(DAL),实现数据的增加、删除、修改、查询等操作,并将操作结果反馈到BLL层;

BLL处理的数据来自数据库和用户界面,其将用户界面收集过来的数据经过业务逻辑层的处理传送到数据库,而从数据库获取的数据,经过业务逻辑层处理后再呈现给用户界面。因此业务逻辑层是中间层,起到承上启下的作用。

经典三层架构的调用关系是:UI调用BLL,BLL调用DAL。而UI与DAL是不可直接相互调用,它们之间相互隔离。

基于 “高内聚,低耦合”理念的三层架构,使得开发人员分工更明确,可以让开发人员的精力更专注于应用系统核心业务逻辑的分析、设计和开发,加快项目的进度,提高了开发效率,有利于项目的升级和维护工作。

体系结构

三层架构的各层之间采用接口相互访问,并通过对象模型的实体类(Model)对象作为数据传递的载体,不同的对象模型的实体类一般对应于数据库的不同表,实体类的属性与数据库表的字段名一致。

表示层和业务逻辑层之间用对象模型的实体类(Model)对象来传递数据,业务逻辑层和数据访问层之间用对象模型的实体类(Model)对象来传递数据,数据访问层通过ORM组件来操作数据库。在DAL和数据库之间,通过ORM实现二维表关系数据和实体类(Model)对象的映射。三层架构的体系结构如图二所示。

图二 三层架构的体系结构
因此三层构架中除了三层之外,还有实体类(Model)对象这最为重要的组成部分。实体类(Model)对象使用实体(Entity)表示,它不属于三层中的任何一层。也就是说实体类(Model)对象可以被三层中的任何一层调用。实体(Entity)与三层的关系如图三所示。 图三 实体与三层的关系

实体类(Model)对象Entity,具体有三个作用:

  • 实体实现面向对象思想中的"封装”。
  • 实体贯穿于三层之间,并在三层之间传递数据。
  • 相邻层之间的单项数据传递依靠变量或实体作为参数来传递,这样就构造了三层之间的联系,从而完成功能实现。

优缺点

优点

  • 可以让开发人员只关注整个架构的某一层;
  • 分层清晰,开发分工也更明确,有利于后期的维护和升级;
  • 单向调用,不允许跨层调用,可以很大程度上降低层与层之间的依赖耦合

缺点

  • 三层之间数据传输都通过实体类(Model)对象实现,实体类的变化将导致三层都需要修改。从而增加维护的工作量,也使得产生Bug的风险加大。
  • 三层之间数据传输都通过实体类(Model)对象实现不利于数据安全。例如一个数据表t_user,其字段包括userName, password, age等信息;password和age是客户的私人信息,这将导致这些数据在三层直接可以随意获取和展示,这是极不合适的。

总结

经典三层架构是分层架构中最原始最典型的分层模式,掌握经典三层模式是理解其他分层模型的基础。本文从三层架构的理念,架构体系,优缺点等三个角度对经典三层架构进行了深入分析。

系统架构:经典三层架构相关推荐

  1. java 三层架构_java三层架构详解

    三层架构模式介绍 三层架构模式: 三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer).业务逻辑层(Bu ...

  2. java ee 三层架构_JavaEE——三层架构模式介绍

    声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 三层架构模式介绍 三层架构模式: 三层架构(3-tier a ...

  3. [SpringBoot] [使用]经典三层架构及“DO/BO/VO/DTO“对象总结

    前言 突然想写点关于SpringBoot相关使用方便的文章. 之前进行了2个月的项目重构, 于是先给大家介绍一下几种经典的项目组成. 三层架构 经典的三层架构主要是Dao/Service/Contro ...

  4. Javaweb经典三层架构的演变

    1.Javaweb经历了三个时期 ①JSP Model1第一代  JSP Model1是JavaWeb早期的模型,它适合小型Web项目,开发成本低!Model1第一代时期,服务器端只有JSP页面,所有 ...

  5. 架构(三层架构)、框架(MVC)、设计模式三者异同点

    前言: 本博客主要针对架构.框架和设计模式三者的差别.还有三层和MVC的差别进行讨论.对于这三者一点都不了解的.请点在维基和百度百科上补补课.这里就不发链接了 软件架构(software archit ...

  6. java 三层架构 mvc_java三层架构与mvc

    Java三层架构 - java独有 界面层(Web).业务逻辑(Service).数据访问层(Dao) WEB层: 包含JSP和Servlet等与WEB相关的内容 表示层属于最接近用户的一层,用于展示 ...

  7. 架构-三层架构:三层架构

    概述 顾名思义,三层架构分为三层,分别是"数据访问层"."业务逻辑层"."表示层". 数据访问层:数据访问层在作业过程中访问数据系统中的文件 ...

  8. [三层架构+WCF]三层架构+WCF实现TaskVision

    前面的一篇博文DebugLZQ使用三层架构实现了TaskVision,并在后面利用Webservice代替ClassLibrary实现SQL Server 2008数据库操作提供程序.关于三层架构的理 ...

  9. 企业级应用架构(一) 三层架构之解耦

    前言 前段时间朋友拿了个网站给我,让我帮忙添加几个小功能,我爽快的答应了,但是当我打开源码,我瞬间就奔溃了,整个项目连最基本的三层框架也没有搭建,仅仅是封装了一个sqlhelp作为数据库的操作接口,项 ...

最新文章

  1. html img调用js,html调用js变量 如何在html中输出js文件中的变量
  2. Linux自动化测试monkey,APP自动化测试中Monkey和 MonkeyRunner
  3. plsql连接oracle报错12514,plsql 登录 oracle11 12514 错误的处理方法
  4. Spring与Struts1的集成
  5. 软件测试自动化的成功经验
  6. mstsc 加密oracle修正,mstsc远程报:这可能是由于CredSSP 加密Oracle修正的两种完美解决方法...
  7. MySQL逻辑运算符的使用
  8. python中一切皆是对象,对象都是在堆上存放的,一切都是指针
  9. 普通电脑能做成瘦客户机吗_阿里云的“无影”云电脑,能不能真的代替传统电脑...
  10. Choerodon 的微服务之路(二):Choerodon 的微服务网关
  11. Android进阶篇-Http协议
  12. java中带包的类在命令行中的编译和执行中出现的问题及解决办法
  13. firemonkey mysql_FireMonkey开发技术简明手册.pdf
  14. [copypaste]各种渐进表示法
  15. Advertising and public relations
  16. 【LB】稀疏矩阵的快速转置原理及其算法
  17. 视觉SLAM十四讲学习笔记-第三讲-旋转向量、欧拉角、四元数
  18. 网络封包截取工具Charles
  19. 数加使用自定义调度资源进行数据同步
  20. Python中的王者荣耀

热门文章

  1. springfox整合SpringMVC
  2. linux系统mysql服务启动失败
  3. (连载)词向量的理解——词嵌入向量(word embedding)
  4. 软件测试面试题,精选100 道,内附答案
  5. YOLOFaceV2笔记
  6. python输入定长数组和输入不定长数组
  7. CentOS7 基线检查
  8. mybatisplus的CRUD基本使用心得--转载
  9. 京东财报图解:年营收破万亿,员工数超55万人,派发10亿美元股利
  10. Android 仿今日头条的频道管理