为什么要分层

  • 高内聚:分层的设计可以简化系统设计,让不同的层专注做某一模块的事
  • 低耦合:层与层之间通过接口或API来交互,依赖方不用知道被依赖方的细节
  • 复用:分层之后可以做到很高的复用
  • 扩展性:分层架构可以让我们更容易做横向扩展

如果系统没有分层,当业务规模增加或流量增大时我们只能针对整体系统来做扩展。分层之后可以很方便的把一些模块抽离出来,独立成一个系统。

2、传统MVC架构

优点:关注前后端分离

缺点:模型层分层太粗,融合了数据处理、业务处理等所有的功能。核心的复杂业务逻辑都放到模型层,导致模型层很乱

适应场景:后端业务逻辑简单的服务,比如接口直接提供对数据库增删改查

3、后端三层架构

定义:

  1. 表现层:controller
  2. 逻辑层:service
  3. 数据访问层:dao

优点:逻辑与数据层分离

缺点:模型层分层比较粗,核心的复杂业务逻辑都放到模型层,导致模型层很乱

适应场景:后端业务逻辑简单的服务,比如接口直接提供对数据库增删改查

4、阿里分层架构

架构来源:参照参照阿里发布的《阿里巴巴 Java 开发手册 v1.4.0(详尽版)》,将原先的三层架构细化而来

特点:添加了Manager 通用业务处理层。

这一层有两个作用,一、可以将原先 Service 层的一些通用能力下沉到这一层,比如与缓存和存储交互策略,中间件的接入;二、也可以在这一层封装对第三方接口的调用,比如调用支付服务,调用审核服务等RPC接口。

优点:相比于三层方式,添加了通用处理层对接外部平台。 上下游对接划分的比较清晰

缺点:核心业务逻辑层没有划分

适应场景:业务逻辑不复杂的常用业务

5、DDD分层架构

(1)特点

  1. 数据、缓存等都视为基础层, 可以被所有层调用
  2. 抽离了领域层,负责核心业务逻辑处理,领域层调用外部依赖全部通过接口,以保证领域层的100%单测覆盖率
  3. 应用层聚合多个领域层的能力,只做功能的组合、转发,不负责具体业务逻辑

优点:相比于三层方式,更关注领域服务,即业务核心逻辑的划分、收敛

缺点:分层复杂, 如果业务逻辑简单没有必要

适应场景:业务复杂的业务

(2)和传统三层架构的对比

DDD四层架构也基于传统三层架构的,不同点有以下几方面:

  1. 关注点不一样:三层架构关注请求调用顺序;DDD架构关注领域服务。
  2. 横向划分方式不一样:三层架构主要关注纵向划分,对横向划分没有约定;DDD架构更关注纵向,即:多个领域层之间划分及交互方式。
  3. 对资源的定位不一样:三层架构把所有依赖的数据都放到数据访问层;DDD架构只将领域强关联的数据放到Repository中,其他比如API层缓存、文件等都当成基础服务来处理。

6、整洁架构和六边形架构

整洁架构和六边形架构都是DDD架构的一种方式,只不过是视角不同。

(1)整洁架构

特点:整洁架构的层就像洋葱片一样,它体现了分层的设计思想

整洁架构最主要的原则是依赖原则,它定义了各层的依赖关系,越往里依赖越低,代码级别越高,越是核心能力。外圆代码依赖只能指向内圆,内圆不需要知道外圆的任何情况。

(2)六边形架构

六边形架构又名“端口适配器架构”。追溯微服务架构的渊源,一般都会涉及到六边形架构。

六边形架构的核心理念是:应用是通过端口与外部进行交互的。我想这也是微服务架构下API网关盛行的主要原因吧。

也就是说,在下图的六边形架构中,红圈内的核心业务逻辑(应用程序和领域模型)与外部资源(包括APP、Web应用以及数据库资源等)完全隔离,仅通过适配器进行交互。它解决了业务逻辑与用户界面的代码交错问题,很好地实现了前后端分离。六边形架构各层的依赖关系与整洁架构一样,都是由外向内依赖。

7、汇总

本文汇总了传统MVC架构、后端三层架构、阿里分层架构、DDD架构以及基于DDD架构的整洁架构和六边形架构。从前往后越来越复杂,其他也对应着软件工程的越来越复杂,架构模式也变的越来越复杂。软件架构领域没有一招鲜吃遍天的功法,针对的不同的业务场景采用不同的架构,并且随着业务的发展,不断调整架构以适应业务的发展,以变(架构、技术组件、重构等)应不变(业务发展、用户体验、稳定性等)才是一个合格的软件工程师应追求的境界。

原文链接:https://juejin.cn/post/6907828643062513671

如果觉得本文对你有帮助,可以转发关注支持一下

ddd架构 无法重构_漫谈分层架构:为什么要进行架构分层?相关推荐

  1. 创建微服务架构的步骤_如何快速搭建一个微服务架构?

    原标题:如何快速搭建一个微服务架构? 微服务火了很久,但网上很少有文章能做到成熟地将技术传播出来,同时完美地照顾"初入微服务领域人员",从 0 开始,采用通俗易懂的语言去讲解微服务 ...

  2. aws云平台架构师 收入_收入15万美元的云架构师可能被低薪

    aws云平台架构师 收入 根据该消息来源, "云架构师的年收入在14万至15万美元之间". 我支付的费用越来越少,具体取决于建筑师的住所. 但是,具有良好的经验和行之有效的成功经验 ...

  3. kettle全量抽数据_漫谈数据平台架构的演化和应用

    随着科技的发展,数据在当代社会中所起的作用越来越大.阿里巴巴集团创始人马云在2014年提出了DT(Data Technology)的概念:"人类正从IT时代走向DT时代".DT的核 ...

  4. 一文读懂微服务架构的重构策略

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 你很有可能正在处理大型复杂的单体应用程序,每天开发和部署应用程序的 ...

  5. C#_三层(BLL DAL Model)架构详解

    C#_三层架构详解 三层架构: 表现层(UI).业务逻辑层(BLL).数据访问层(DAL)再加上实体类库(Model) 表现层(UI):一般都是窗体的设计或者网页的设计,是可以一眼就可以看到的界面. ...

  6. 计算机网络实验_三层架构企业网络_基于Cisco Packet Tracer模拟器

    三层架构企业网络_基于Cisco Packet Tracer模拟器 一.实验目的 1.了解一般企业网络的三层架构模型: 2.了解三层架构企业网络内部的通信流程: 3.理解双核心路由的热备份和负载均衡. ...

  7. 亿级流量架构演进实战 | 架构演进重构消息PUSH系统 05

    这不是一个讲概念的专栏,而且我也不擅长讲概念,每一篇文章都是一个故事,我希望你可以通过这些故事了解我当时在实际工作中遇到问题和背后的思考,架构设计是种经验,我有幸参与到多个亿级系统的架构设计中,有所收 ...

  8. 架构之重构的12条军规

    2019独角兽企业重金招聘Python工程师标准>>> 注]架构之重构的12条军规(上)发布以后,一些读者着急要下篇,所以在这里我把上下篇合并成一篇,让大家可以阅读完整版,不用分开看 ...

  9. 架构漫谈(八):从架构的角度看如何写好代码 + 我的思考

    我的总结:当先前对于利益相关者的关系理清了,系统基本架构和测试方法等也有了,进入实际Coding阶段.在Coding前,需要我们考虑好业务功能的分配,关注于功能会频繁变更的部分,为未来的维护和扩展打下 ...

最新文章

  1. 记录在Ubuntu14.04上安装ryu中遇到的各种坑
  2. 自制一个 elasticsearch-spring-boot-starter
  3. 数字字符串转化为字母组合的种数
  4. 实事求实来看综合布线网络
  5. MyBatis注解模式取参数方法
  6. 小程序中 使用fixed自定义弹窗时,底部长页面禁止滚动
  7. s3c6410 ddr初始化
  8. 多线程学习-时间改变事件
  9. LCP 44. 开幕式焰火
  10. 学习笔记--对最近学习的总结
  11. GB-T 15834-2011《标点符号用法》文档的格式问题
  12. proteus元件图片_proteus元件库
  13. 实信号变成解析信号的实现方法
  14. 机器学习算法LR(logit regression逻辑回归)原理简单解析
  15. 资源下载https://msdn.itellyou.cn/
  16. 百度地图绘制大量标注点卡顿问题完美解决
  17. 鸿蒙pc系统镜像,鸿蒙系统有pc版么_鸿蒙系统有pc版安装方法
  18. 《Android软件安全权威指南》原生程序分析 阅读笔记
  19. 2022年,计算机er保研选计科还是电信?
  20. Asset Pricing:Introduction

热门文章

  1. java实现套接字网络编程_Java网络编程(一)Socket套接字
  2. java多线程notify_Java多线程 wait notify
  3. asp是什么文件?html和asp的区别?(HTML是客户端语言,主要用于创建静态网页;asp是服务器端语言,用于设计用户交互式页面或动态页面)
  4. CMD是什么?(命令行提示符)如何使用python在windows上操作CMD?(python执行命令行)os.syste[m](执行的命令)、os.popen(执行的命令)
  5. JDK1.8 Lambda 使用详解(转)
  6. Java多线程(一):Runnable和Thread的基本用法
  7. vue教程2:vue基础
  8. 你了解过Spring支持的常用数据库事务传播属性和隔离级别吗?来一起看看吧!!!
  9. python怎么画波浪_python 实现波浪滤镜特效
  10. 移动端html游戏开发,GitHub - PromeYang/GameBuilder: GameBuilder 是移动端轻量HTML5游戏快速开发框架,主要应用于活动推广。...