06 - 2 分层架构模式(Layered Arch)

news2024/11/20 14:22:15

层的定义

  • 层:软件的逻辑单元
  • 每一层都有特定的功能
  • 组件被分配到不同的层

何谓分层

  • 将系统按照职责拆分和组织
  • 上层依赖于直接下层
    • 下层不可以依赖于上层
    • 不可以跃层访问(理想状况)

经典分层架构

OSI 7 层架构

在这里插入图片描述

CS

  • 两层架构
  • Client:运行于Desktop的Native富客户端
  • Server:应用服务、业务逻辑和数据存储
  • 通过网络交换信息

BS

  • 两层架构
  • Browser:运行于各种浏览器的瘦客户端
  • Server:应用服务、业务逻辑和数据存储
  • 通过网络交换信息

企业应用三层架构

  • Presentation:与用户交互和呈现信息
  • Domain:业务逻辑
  • Data:数据存储
    在这里插入图片描述

缘何分层

  • Conway’s Law

    • 设计系统的架构受制于产生这些设计的组织的沟通结构
  • 复杂度隔离

    • 隔离业务复杂度和技术复杂度
    • 解决不同层的问题可以采用不同的技术栈
    • 每层变化速度不一致
  • 防止错误传播

    • 降低错误影响
    • 防水仓设计
  • 层自治

    • 本层功能内聚
    • 自主决策
    • 只有本层的知识
      • 知道的越少,泄密的可能性越少
      • 对外界的依赖少,受影响的可能性小
        在这里插入图片描述

分层架构的优缺点

优点

  • 高内聚

    • 每一层的任何变化最多影响自身和上一层
    • 专注自身功能,其它层的影响被屏蔽
    • Single Responsibility
  • 低耦合

    • 每一层只依赖于下一层
    • 单向依赖
    • 通过接口交流
  • 易扩展

    • 功能扩展,仅影响本层
    • 内聚性,易于横向扩展
    • 独立性,易于纵向扩展
  • 可维护性好

    • 分工合作,开发者关注点集中
    • 每一层可以依据接口并行开发
    • 每一层功能单一,代码易于理解
  • 可测试性好

    • 每层对外提供固定的接口,可以直接测试接口
    • 分层测试
    • Spring Boot
      • @DataJpaTest
      • @WebMvcTest

缺点

  • 性能下降
    • 分层必定引入新的通信开销
    • 层信息不能泄露,导致每层都有数据转化发生
    • 不能跨层访问,增加调用链路
  • 开发成本上升
    • Full Stack少,且难以培养
    • 跨组织沟通成本
    • 任何变更可能都需要多层的参与

如何设计分层架构

依赖规则

在这里插入图片描述

  • 越往外越具体,越朝内越抽象
  • 外圈是软件,内圈是规则
  • 依赖关系只能从外向内

定义职责

  • 高层表示规则,底层实现细节
  • 逻辑内聚自治分区
  • 依据组织职责分工

定义技术栈

  • 根据每层的需求各自选定
  • 借鉴成功案例
  • 部署方式

代码抽象与分层

  • 层对外暴露的接口,隐藏实现细节
  • 实现依赖于抽象,抽象不可依赖于实现细节
  • 代码不跨层调用,只依赖于直接的下一层

集成

  • 集成前做单元测试
  • 根据接口和技术栈确定集成方式
  • 集成联调

案例解析

MVC

  • Model:Domain model和业务逻辑
  • View:展示数据和用户交互
  • Controller:
    • 接收输入并转化为对model的操作
    • 将model转化为view能展示的数据
      在这里插入图片描述

MVP

  • MVC的派生变种
  • View通过Presenter获得数据而非Model
  • Presenter层充当了桥梁,双向绑定
    在这里插入图片描述

MVVM

  • Model 层除了自身也包含部分Controller功能
  • ViewModel:View的模型、映射、显示逻辑和绑定器
  • View:将ViewModel展示在特定界面
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/491782.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

生动形象的傅里叶变换解析!

使用联想链条和几何直观,辅以从实际需求衍生概念的思考模式,详解什么是傅立叶变换,为什么要做傅立叶变换等,帮助记忆和理解,目的当然是标题所说:让你永远忘不了傅里叶变换这个公式。另,这篇博客…

MySQL之Server层的内存结构

前言 本文已收录在MySQL性能优化原理实战专栏,点击此处浏览更多优质内容。 前面的文章我们介绍了InnoDB存储引擎的一些内存、内存磁盘的结构以及工作原理,今天我们就来看一下关于MySQL Server层的一些内存结构。 目录 一、Binlog Cache1.1 Binlog Cache工…

jvm之远程调试

写在前面 工作中,有时会出现测试环境有问题,本地却正常的情况,此时我们就可以通过JVM提供的远程调用的功能,实现在本地debug调试测试环境代码。 1:例子1直接运行class 首先我们来定义类: package com.f…

Blender 形变类修改器:曲线

目录 形变类修改器1. 测试一:减少环切数量1.1 调整物体原点1.2 让两个物体原点重合1.3 添加曲线修改器1.4 融并边 2. 测试二:曲线的方向2.1 查看曲线的方向(曲线法向显示)2.2 在3D空间调整曲线 3. 测试三:空间位置的影…

【Minecraft开服教学】使用 MCSM 面板一键搭建我的世界服务器 并使用内网穿透公网远程联机

文章目录 前言1.Mcsmanager安装2.创建Minecraft服务器3.本地测试联机4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射内网端口 5.远程联机测试6. 配置固定远程联机端口地址6.1 保留一个固定TCP地址6.2 配置固定TCP地址 7. 使用固定公网地址远程联机 转载自远程穿透文章&…

C语言中链表经典面试题目

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C 🔥座右铭:“不要等到什么都没有了,才下…

MySQL之Change Buffer详解

前言 本文已收录在MySQL性能优化原理实战专栏,点击此处浏览更多优质内容。 上一篇文章一文带你了解MySQL数据库InnoDB_Buffer_Pool(点击跳转)我们学习了InnoDB Buffer Pool的工作原理,其作用是减少MySQL读取数据时直接与磁盘打交道…

百趣代谢组学党参远志散对记忆障碍大鼠学习能力和肠道菌群的影响

文章标题:Effects of Dangshen Yuanzhi Powder on learning ability and gut microflora in rats with memory disorde 发表期刊:Journal of Ethnopharmacology 影响因子:5.195 作者单位:山西中医药大学 百趣提供服务&#xf…

什么是元宇宙数字展厅?元宇宙前景如何 ?

元宇宙是一个近年来备受关注的概念,它被认为是未来数字世界的新形态。元宇宙是一个虚拟的、数字化的世界,它可以模拟现实世界的各种物理、社会和经济系统,同时也可以融合人工智能、虚拟现实等前沿技术,为用户提供更加丰富、多样化…

钴基双金属氧化物储能材料的高效制备和电化学应用

一、引言 钴金属氧化物作为一类典型的储能材料,既可以用于锂离子电池负极材料,又可以用于超级电容器电极材料,因而备受关注 。在作为锂离子电池负极材料时,具有较高的理论比容量,但充放电体积变化较大、材料导电性较差…

十、MyBatis的缓存

文章目录 十、MyBatis的缓存10.1 MyBatis的一级缓存场景1:判断同一个sqlSession是否查询1级缓存,答案:会查询1级缓存场景2:判断不同sqlSession是否查询1级缓存,答案:不会查询1级缓存场景3:判断相…

企业服务管理(ESM)工具

什么是企业服务管理 企业服务管理 (ESM) 是 IT 服务管理(ITSM)原则的延伸,旨在为人力资源 (HR)、法律、设施、营销和财务等业务团队提供更好的服务。ITSM 是 IT 团队管理向客户提供端到端 IT 服务的方式。ESM 的一个例子是建立一个可供整个组织所有团队使用的服务台…

LED显示屏周边设备

LED显示屏市场也呈多元化发展,异型屏、灯条屏、透明屏、小间距等应用新产品的出现无疑不是一种技术创新。以上创新技术的应用,对LED显示屏周边设备生产企业也提出了更高要求。因此,周边设备对推动整个LED显示屏的产业发展起着举足轻重、不可或…

【Linux-进程通信1】管道

🌈进程间通信介绍 🍄进程间通信目的 在操作系统中,每个进程都是独立运行的,它们有自己的地址空间和资源,它们不能直接访问其他进程的资源。然而,在现代计算机系统中,很少有一个进程能够独立完成…

yolov5读取单通道图像会怎样?

通过上图打印可知输入是固定3通道,那么意味着在读取图像中会对图像进行处理。 opencv在默认情况下会读取3个通道的图像,如果是灰度图会将图层复制三次(BGR缺省,BGR),因此读出来的图片是三通道。

xcode打包导出ipa

转载:xcode打包导出ipa 众所周知,在开发苹果应用时需要使用签名(证书)才能进行打包安装苹果IPA,作为刚接触ios开发的同学,只是学习ios app开发内测,并没有上架appstore需求,对于苹果…

【Mybatis】Mybatis之xml开发—用户角色权限关联案例

目录 要求:使用xml开发完成需求查询。 数据库 需求 要求:使用xml开发完成需求查询。 数据库 -- 用户表 create table sys_user(user_id int primary key auto_increment comment 用户ID,user_name varchar(50) comment 用户名,password varchar(32)…

软件测试——性能指标

登录功能示例: 并发用户数500; 响应时间2S; TPS到500; CPU不得超过75%; 性能指标有哪些? 响应时间 并发用户数 TPS CPU 内存 磁盘吞吐量 网络吞吐量 移动端FPS 移动端耗电量 APP启动时间 性能…

windows11 安装多个mysql8

安装一个mysql请参考:windows系统安装mysql8 解压缩版安装顺序_csdn_aspnet的博客-CSDN博客 下载mysql:MySQL :: Download MySQL Community Server 下载后解压到你指定的目录,我下载的非最新版,如图: 在文件夹下面建一…

【SpringMVC】| 控制器异常处理机制及实现流程

MVC目录 一. 🦁 前言二. 🦁 控制器异常处理Ⅰ. 单个控制器异常处理Ⅱ. 全局异常处理Ⅲ. 自定义异常处理 三. 🦁 最后 一. 🦁 前言 咱们来探索一下控制器异常处理流程,以及如何来实现它。 二. 🦁 控制器异…