六边形架构和分层架构的区别?

六边形架构和分层架构是什么?

六边形架构(Hexagonal Architecture)和分层架构(Layered Architecture)是两种常见的软件架构模式。
六边形架构强调将核心业务逻辑与外部依赖解耦,通过接口与外部世界进行通信。核心业务逻辑位于架构的中心,而外部依赖通过适配器与核心业务逻辑连接在一起。这种架构具有灵活性高、易于测试和扩展的优点。
分层架构将软件系统划分为多个逻辑层,每个层具有特定的职责和功能。常见的层包括表示层、应用层、领域层和基础设施层。分层架构提供了清晰的分离和组织方式,使得各个层的职责清晰可见,并且易于理解、测试和维护。
这两种架构模式在软件系统设计和开发中有不同的应用场景和优势,可以根据具体需求选择适合的架构模式。

六边形架构图:

1b918dbcbb12a294cc74d6adc53f2b98.png

分层架构图:

25efd0dcd853a875a41701fb34808452.png

六边形架构和分层架构是两种常见的软件架构模式,它们在组织和划分代码的方式上存在一些区别。

  1. 六边形架构(Hexagonal Architecture)也被称为端口和适配器架构(Ports and Adapters Architecture),它的核心思想是将系统划分为内部和外部两个层次。

    六边形架构的目标是保持核心业务逻辑的纯净性和可测试性,同时将外部依赖与核心逻辑解耦,提供灵活性和可扩展性。

  • 内部层(Core)是应用程序的核心,包含业务逻辑和领域模型。它是独立于任何外部依赖的,不依赖于特定的框架或平台。

  • 外部层(Adapters)用于处理系统与外部世界的交互,包括用户接口、数据库、外部服务等。它负责将外部输入转换为内部可处理的数据,将内部数据输出到合适的外部格式。

分层架构(Layered Architecture)是一种更传统的架构模式,将系统划分为多个水平的层次。常见的分层通常是三层架构,即表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。

分层架构的主要优势是在不同层次之间提供清晰的职责划分,使得代码更易于维护和扩展。每个层次依赖于下一层,通过接口进行通信。

  • 表示层负责处理与用户界面的交互,包括接收用户输入、展示数据等。

  • 业务逻辑层包含系统的核心业务逻辑,处理业务规则和流程。

  • 数据访问层用于与数据存储进行交互,包括数据库、文件系统等。

六边形架构和分层架构的应用场景?

六边形架构的应用场景:

  • 复杂业务逻辑:六边形架构适用于具有复杂业务逻辑的应用程序。通过将核心业务逻辑与外部依赖解耦,可以更好地管理和测试业务规则和流程。可测试性要求高:六边形架构的内部层是独立于外部依赖的,使得核心业务逻辑可以单独进行单元测试,而无需依赖外部资源。这提高了系统的可测试性,并且能够更容易地进行自动化测试。

  • 需要灵活性和可扩展性:六边形架构通过解耦内部核心逻辑和外部依赖,提供了更大的灵活性和可扩展性。当需要添加新的外部适配器或更改外部依赖时,对内部核心逻辑没有太大影响。

分层架构的应用场景:

  • 简单业务逻辑:分层架构适用于相对简单的业务逻辑,例如小型应用程序或原型开发。它提供了一种简单而直观的代码组织方式,易于理解和维护。

  • 结构清晰明确:分层架构通过将系统划分为不同的水平层次,使得每个层次都有明确的职责和功能。这样有助于提高代码的可读性和可维护性。

  • 跨平台兼容性:分层架构通常不依赖于特定的框架或平台,而是通过接口进行通信。这使得应用程序更具跨平台兼容性,可以在不同的环境中运行和扩展。

需要注意的是,六边形架构和分层架构并非互斥的选择,实际项目中也可以结合使用它们的特点,根据具体需求进行架构设计。选择适合的架构取决于项目的规模、复杂性和团队的技术经验。

最后

    一般在ddd中基本都是用到六边型架构,而传统架构的优势就是简单、高效容易上手,不过在严格的六边天型来说真的很难达到,哪怕一时达到了可能也会随着迭代或者人员更换导致有所出入,当然也不是说不好,只是说最终还是要看场景。

参考文章:

https://developer.aliyun.com/article/1204103

https://blog.csdn.net/qianshangding0708/article/details/106232926

https://stibel.icu/md/method/arch-principle/arch-principle-arch-develop.html

https://zhuanlan.zhihu.com/p/479800537

https://juejin.cn/post/7034495653333958670

https://insights.thoughtworks.cn/architecture-from-sandwich-to-hexagon/

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

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

相关文章

一文让你彻底搞懂Mybatis之缓存机制

编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 Mybatis版本:3.5.6 文章目录 一. 缓存是什么?二. 为什么要使用缓存?三. Mybatis中的缓存分哪几种&#…

MySql基本操作

在了解具体的MySql操作之前,我们需要了解一些基本的sql语句注意事项,如下所示: 每一条sql语句都需要以英文 ; 作为结尾;sql语句当中的关键字不区分大小写,不区分双引号和单引号;sql中库名称、表名称和字段…

Windows 不同方式打开的cmd/dos窗口属性配置不同

文章目录 1. 默认值(控制台窗口)属性2. "C:\Windows\System32\cmd.exe" 属性3. "命令提示符"属性4. 自定义某标题cmd窗口属性5. cmd快捷方式的属性总结 最近在写某个批处理脚本时,意外发现 Windows系统中,在不…

HBuilder 编辑器终端窗口无法输入,未响应的解决方案

HBuilder 编辑器终端窗口无法输入,未响应的解决方案 一、找到 HBuilder 安装目录 找到 main.js HBuilderX - plugins - builtincef3terminal - script - main.js 二、编辑 main.js 将 main.js 文件中的 powershell.exe 和 cmd.exe 路径都改为绝对路径 C:/Windows…

传染病模型

title: 传染病模型 date: 2023-7-24 10:55:00 updated: 2023-7-24 10:55:00 tags: 算法数学建模传染病模型matlab categories: 数学建模 传染病模型中的符号表示 SI模型(艾滋传染模型) %% 直接求微分方程的解析解 dsolve(Dx1 -0.1 * x1 * x2 / 1000, D…

SSIS对SQL Server向Mysql数据转发表数据 (三)

1、在控制流界面,在左侧的组件里,添加一个“序列容器组件”和一个“数据流任务组件” 2、双击数据流任务,进入到数据流界面,然后再在左面添加一个OLE DB 源组件、目标源组件 3、右键源组件,编辑,选择好相关…

2023年 React 最佳学习路线

CSS CSS JavaScript JavaScript TypeScript 目前没有找到比其他文档好很多的文档地址 可以先看官网 React 新版 React 官方文档无敌 React React-router-dom V5 V6 Webpack webpack Antd antd

神码ai火车头伪原创设置【php源码】

大家好,给大家分享一下python考什么内容,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 火车头采集ai伪原创插件截图: 1、Python 计算机二级都考什么 Python要到什么程度 考试内容 一、Python语言的基本语法元素…

Jenkins 拉取 GitHub 私有仓库失败问题

添加仓库的时候提示 stderr: fatal: Cannot prompt because user interactivity has been disabled. 把在 GitHub账户设置中生成的个人访问令牌填到地址里

技术分享 | App测试时常用的adb命令你都掌握了哪些呢?

adb 全称为 Android Debug Bridge(Android 调试桥),是 Android SDK 中提供的用于管理 Android 模拟器或真机的工具。 adb 是一种功能强大的命令行工具,可让 PC 端与 Android 设备进行通信。adb 命令可执行各种设备操作&#xff0…

cnvd水证书

日常水个证书 本人比较菜,挖cnvd总是挖不倒漏洞,只能从弱口令入手了,一般使用fofa脚本批量跑。 过程: 日常在佛法中我们总是会遇见设备弱口或系统弱口令 一般是看登录成功的特征和口令,写一个对应的弱口令检测脚本…

Linux虚拟机(lvm)报Unmount and run xfs_repair

问题 linux系统没有正常关机,今天启动虚拟机无法进入系统,提示metadata corruption deleted at xxxx; Unmount and run xfs_repair 分析 主机异常掉电后里面的虚拟机无法启动,主要是损坏的分区 解决 看出来应该是dm-0分区损坏…

WebClient,HTTP Interface远程调用阿里云API

HTTP Interface Spring 允许我们通过定义接口的方式&#xff0c;给任意位置发送 http 请求&#xff0c;实现远程调用&#xff0c;可以用来简化 HTTP 远程访问。需要webflux场景才可 <dependency><groupId>org.springframework.boot</groupId><artifactId&…

Spring中最简单的过滤器和监听器

1. 过滤器概念引入 Filter也称之为过滤器&#xff0c;它是Servlet技术中最实用的技术&#xff0c;Web开发人员通过Filter技术&#xff0c;对web服务器管理的所有web资源&#xff1a;例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截&#xff0c;从而实现一些特殊的功…

uniapp 微信小程序:页面+组件的生命周期顺序

uniapp 微信小程序&#xff1a;页面组件的生命周期顺序 首页页面父组件子组件完整顺序参考资料 这个uniapp的微信小程序项目使用的是 VUE2 首页 首页只提供了一个跳转按钮。 <template><view><navigator url"/pages/myPage/myPage?namejerry" hov…

【React】精选5题

第1题&#xff1a;简述下 React 的生命周期&#xff1f;每个生命周期都做了什么&#xff1f; React 组件的生命周期可以分为三个阶段&#xff1a;挂载阶段、更新阶段和卸载阶段。每个生命周期方法都有特定的目的和功能。 挂载阶段&#xff1a; constructor&#xff1a;组件的构…

6个高清图片素材网站,免费下载,值得推荐~

关于图片素材网站&#xff0c;我一直都在推荐这几个&#xff0c;免费下载&#xff0c;可商用&#xff0c;建议收藏起来~ 菜鸟图库 https://www.sucai999.com/pic.html?vNTYwNDUx 网站主要是为新手设计师提供免费素材的&#xff0c;素材的质量都很高&#xff0c;类别也很多&a…

Git移除commit过的大文件

前言&#xff1a;在提交推送本地更改至仓库时&#xff0c;误将大文件给提交了&#xff0c;导致push时报错文件过大&#xff0c;因此需要将已经commit的大文件移除后再push 若已知要删除的文件或文件夹路径&#xff0c;则可以从第4步开始 1.对仓库进行gc操作 $ git gc 2.查询…

23款奔驰S400豪华型升级后排电动腿托系统,提升后排乘坐舒适性

奔驰S400L后排座椅是不带腿托和脚托的&#xff0c;也没有一键躺平功能&#xff0c;相对于奔驰S级高配车型上配置的右边老板位座椅&#xff0c;舒适性就差强了一些。

【基于Spark的电影推荐系统】环境准备

概览 本科毕设做过电影推荐系统&#xff0c;但当时的推荐算法只有一个&#xff0c;现在已经忘记大部分了&#xff0c;当时也没有记录&#xff0c;因此写这个博客重新来记录一下。此外&#xff0c;技术栈由于快秋招原因来不及做过多的部分&#xff0c;因此只实现简单的功能&…