系统架构:经典三层架构
引言
经典三层架构是分层架构中最原始最典型的分层模式,其他分层架构都是其变种或扩展,例如阿里的四层架构模式和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是客户的私人信息,这将导致这些数据在三层直接可以随意获取和展示,这是极不合适的。
总结
经典三层架构是分层架构中最原始最典型的分层模式,掌握经典三层模式是理解其他分层模型的基础。本文从三层架构的理念,架构体系,优缺点等三个角度对经典三层架构进行了深入分析。
系统架构:经典三层架构相关推荐
- java 三层架构_java三层架构详解
三层架构模式介绍 三层架构模式: 三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer).业务逻辑层(Bu ...
- java ee 三层架构_JavaEE——三层架构模式介绍
声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权:凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记. 三层架构模式介绍 三层架构模式: 三层架构(3-tier a ...
- [SpringBoot] [使用]经典三层架构及“DO/BO/VO/DTO“对象总结
前言 突然想写点关于SpringBoot相关使用方便的文章. 之前进行了2个月的项目重构, 于是先给大家介绍一下几种经典的项目组成. 三层架构 经典的三层架构主要是Dao/Service/Contro ...
- Javaweb经典三层架构的演变
1.Javaweb经历了三个时期 ①JSP Model1第一代 JSP Model1是JavaWeb早期的模型,它适合小型Web项目,开发成本低!Model1第一代时期,服务器端只有JSP页面,所有 ...
- 架构(三层架构)、框架(MVC)、设计模式三者异同点
前言: 本博客主要针对架构.框架和设计模式三者的差别.还有三层和MVC的差别进行讨论.对于这三者一点都不了解的.请点在维基和百度百科上补补课.这里就不发链接了 软件架构(software archit ...
- java 三层架构 mvc_java三层架构与mvc
Java三层架构 - java独有 界面层(Web).业务逻辑(Service).数据访问层(Dao) WEB层: 包含JSP和Servlet等与WEB相关的内容 表示层属于最接近用户的一层,用于展示 ...
- 架构-三层架构:三层架构
概述 顾名思义,三层架构分为三层,分别是"数据访问层"."业务逻辑层"."表示层". 数据访问层:数据访问层在作业过程中访问数据系统中的文件 ...
- [三层架构+WCF]三层架构+WCF实现TaskVision
前面的一篇博文DebugLZQ使用三层架构实现了TaskVision,并在后面利用Webservice代替ClassLibrary实现SQL Server 2008数据库操作提供程序.关于三层架构的理 ...
- 企业级应用架构(一) 三层架构之解耦
前言 前段时间朋友拿了个网站给我,让我帮忙添加几个小功能,我爽快的答应了,但是当我打开源码,我瞬间就奔溃了,整个项目连最基本的三层框架也没有搭建,仅仅是封装了一个sqlhelp作为数据库的操作接口,项 ...
最新文章
- html img调用js,html调用js变量 如何在html中输出js文件中的变量
- Linux自动化测试monkey,APP自动化测试中Monkey和 MonkeyRunner
- plsql连接oracle报错12514,plsql 登录 oracle11 12514 错误的处理方法
- Spring与Struts1的集成
- 软件测试自动化的成功经验
- mstsc 加密oracle修正,mstsc远程报:这可能是由于CredSSP 加密Oracle修正的两种完美解决方法...
- MySQL逻辑运算符的使用
- python中一切皆是对象,对象都是在堆上存放的,一切都是指针
- 普通电脑能做成瘦客户机吗_阿里云的“无影”云电脑,能不能真的代替传统电脑...
- Choerodon 的微服务之路(二):Choerodon 的微服务网关
- Android进阶篇-Http协议
- java中带包的类在命令行中的编译和执行中出现的问题及解决办法
- firemonkey mysql_FireMonkey开发技术简明手册.pdf
- [copypaste]各种渐进表示法
- Advertising and public relations
- 【LB】稀疏矩阵的快速转置原理及其算法
- 视觉SLAM十四讲学习笔记-第三讲-旋转向量、欧拉角、四元数
- 网络封包截取工具Charles
- 数加使用自定义调度资源进行数据同步
- Python中的王者荣耀