层的定义

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

何谓分层

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

经典分层架构

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展示在特定界面

06 - 2 分层架构模式(Layered Arch)相关推荐

  1. spring mvc返回页面显示空白_Spring 框架基础(06):Mvc架构模式简介,执行流程详解...

    一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不 ...

  2. Spring 框架基础(06):Mvc架构模式简介,执行流程详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集 ...

  3. .net mvc actionresult 返回字符串_Spring 框架基础(06):Mvc架构模式简介,执行流程详解

    一.SpringMvc框架简介 1.Mvc设计理念 MVC是一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个组件里面,在改进和个性化定制界面及用户交互的同时,不 ...

  4. 再理下系统分层架构模式

    MVC是横向分工:三层架构,是纵向分层. 在大多数架构图中,MVC被画成三角形,View是使用者能够看到并操作的层(可能是Web页面,也可能是GUI),Controller是处理各种操作请求的核心,M ...

  5. 软件体系架构模式之二分层体系结构

    分层体系结构模式是n层模式,其中组件被组织在水平层中.这是设计大多数软件的传统方法,并且具有独立性.这意味着所有组件都是互连的,但彼此之间不依赖. 图1:分层架构 在此体系结构中有四层,其中每一层在模 ...

  6. 这 3 种 DDD 分层架构的模式,你掌握了么?

    -     前言    - 在讨论DDD分层架构的模式之前,我们先一起回顾一下DDD和分层架构的相关知识. -     DDD 的基本概念     - DDD(Domain DrivenDesign, ...

  7. DDD分层架构的三种模式

    本文来说下DDD分层架构的三种模式 文章目录 概述 DDD 分层架构 模式一:四层架构 模式二:五层架构 模式三:六边形架构 本文小结 概述 在讨论DDD分层架构的模式之前,我们先一起回顾一下DDD和 ...

  8. 软件架构模式 mark Richards - 读后总结 1 - 分层架构

    软件架构模式 Mark Richards 著 版权归 © 2015 O'Reilly Media, Inc. 所有. 原书发布链接为  Software Architecture Patterns [ ...

  9. 还在搞三层架构?了解下 DDD 分层架构的三种模式吧 !

    来源:jianshu.com/p/a775836c7e25 引言 在讨论DDD分层架构的模式之前,我们先一起回顾一下DDD和分层架构的相关知识. DDD DDD(Domain DrivenDesign ...

最新文章

  1. 如何识别AWARD的BIOS-ID
  2. 【控制】《多智能体系统一致性协同演化控制理论与技术》纪良浩老师-第1章-多智能体系统一致性问题概述
  3. jQuery图片翻转弹出动画特效
  4. 你在做大数据?你有目标么?
  5. Oracle学习(十五)PLSQL安装
  6. 腾讯看点投放系统介绍:推荐系统的进化伙伴
  7. 数字调色盘【RGB和16位】
  8. kail linux更新源、挂载
  9. 云计算实战系列-磁盘阵列
  10. codeforces 360B
  11. 一个封锁操作被对 wsacancelblockingcall 的调用中断_备战秋招——操作系统(3)
  12. 小米6X反复自动重启停不下,取下卡槽、电源音量-,ok了
  13. Steven N.S.Cheung之婚姻合约文章简评
  14. littleVGL学习笔记9——lv_btn 按钮
  15. html没有注册类,电脑提示没有注册类别的解决方法大全
  16. Centos7服务器网络配置
  17. 超超经典语录200条、看的我心拔凉拔凉的、我真的hold
  18. 突发!顶尖大学教授跑步后洗澡晕倒猝逝,年仅53岁
  19. 二见钟情之ComboBox显示查询结果集
  20. 元宇宙黑马来袭 海姆达尔Heimdallr 开启链游新玩法

热门文章

  1. Linux文件目录结构详解
  2. 第六十五集 Squid缓存代理服务(p≧w≦q)
  3. 关于最新笔记本机型预装win8如何更换为win7的解决办法
  4. 微信养号服务器,微信30天养号技巧(附养号操作图)
  5. 什么颜色对眼睛最好?
  6. Java提取游戏_GALGAME 剧本提取工具
  7. csv格式文件如何转换成excel文件
  8. 经纬度与WGS84坐标转换
  9. 500个爆文标题_看了1000个爆文标题,终于发现了这个规律.......
  10. 阿基米德螺旋公式的再认识