系统架构:经典三层架构

news/2024/10/31 3:23:15/

引言

经典三层架构是分层架构中最原始最典型的分层模式,其他分层架构都是其变种或扩展,例如阿里的四层架构模式和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是客户的私人信息,这将导致这些数据在三层直接可以随意获取和展示,这是极不合适的。

总结

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


http://www.ppmy.cn/news/33017.html

相关文章

jupyter的安装和使用

目录 ❤ Jupyter Notebook是什么? notebook jupyter 简介 notebook jupyter 组成 网页应用 文档 主要特点 ❤ jupyter notebook的安装 notebook jupyter 安装有两种途径 1.通过Anaconda进行安装 2.通过pip进行安装 启动jupyter notebook ❤ jupyter …

webpack之处理js资源

原因是 Webpack 对 js 处理是有限的,只能编译 js 中 ES 模块化语法,不能编译其他语法。 针对 js 兼容性处理,我们使用 Babel 来完成 针对代码格式,我们使用 Eslint 来完成 Eslint 可组装的JavaScript和JSX检查工具 1. 配置文件…

如何给网页加速,如何加速网页速度?

如何加速网页速度?提高移动网页加载的速度,可以从服务器的优化、网页的容量、请求响应等方面入手,这些方面优化后必然可以提高加载速度。1、服务器硬件软件配置要好,网络、读写响应等要做好优化。2、可以开启gzip压缩技术&#xf…

UE实现建筑分层抽屉展示效果

文章目录 1.实现目标2.实现过程2.1 基础设置2.2 核心函数3.参考资料1.实现目标 使用时间轴对建筑楼层的位置偏移进行控制,实现分层抽屉的动画展示效果。 2.实现过程 建筑抽屉的实现原理比较简单,即对Actor的位置进行偏移,计算并更新其世界位置即可。这里还是基于ArchVizExp…

Windows与Linux端口占用、查看的方法总结

Windows与Linux端口占用、查看的方法总结 文章目录Windows与Linux端口占用、查看的方法总结一、Windows1.1Windows查看所有的端口1.2查询指定的端口占用1.3查询PID对应的进程1.4查杀死/结束/终止进程二、Linux2.1lsof命令2.2netstat命令一、Windows 1.1Windows查看所有的端口 …

如何用Python和hashlib实现文件MD5码的批量存储

目录 简介: 源代码: 源代码说明: 效果如下所示: 简介: 可以考虑以下几个可能的应用: 如果你需要对文件进行校验或验证,你可以使用MD5码来检查文件是否被篡改或损坏。如果你需要对文件进行分…

20230314整理

1.JVM内存区域 程序计数器:字节码解释器通过改变程序计数器来依次读取指令,在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。它的生命周期随着线程的创建而创…

面试官:html里面哪个元素可以让文字换行展示

在HTML中&#xff0c;可以使用 <br> 元素来强制换行&#xff0c;也可以使用CSS的 word-break 或 white-space 属性来实现自动换行。以下是这些方法的具体说明&#xff1a; 1.使用 <br> 元素 <br> 元素可以在文本中插入一个换行符&#xff0c;使文本从该位置…