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

news2024/11/23 15:28:49

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

六边形架构(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.coloradmin.cn/o/784427.html

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

相关文章

hcip mgre与rip实验

要求: 1.toop搭建 2.IP地址规划 R1g 0/0/1 192.168.1.1 24 s 4/0/0 188.0.0.2 24 t:10.0.0.1 24R2 s 4/0/0 188.0.0.1 24 s 4/0/1 188.0.1.1 24 s 3/0/0 188.0.2.1 24 loop0 8.8.8.8 24 t:10.0.0.2 24 R3g…

本地 IDC 中的 K8s 集群如何以 Serverless 方式使用云上计算资源

作者:庄宇 在前一篇文章《应对突发流量,如何快速为自建 K8s 添加云上弹性能力》中,我们介绍了如何为 IDC 中 K8s 集群添加云上节点,应对业务流量的增长,通过多级弹性调度,灵活使用云上资源,并通…

Python自动化测试框架pytest的详解安装与运行

这篇文章主要为大家介绍了Python自动化测试框架pytest的简介以及安装与运行,有需要的朋友可以借鉴参考下希望能够有所帮助,祝大家多多进步 1. pytest的介绍 pytest是一个非常成熟的全功能的python测试工具,它主要有以下特征: 简…

二进制子集题解

样例输入: 13样例输入: 0 1 4 5 8 9 12 13思路分析: 这道题大体就是进制转换然后按位 d f s dfs dfs。进制转换比较好理解,不懂得可以自行 b d f s ( 百度优先搜索 ) bdfs(百度优先搜索) bdfs(百度优先搜索)一下。 代码&#…

【LeetCode】260.只出现一次的数字 III(找出单身狗)

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》 🌝每一个不曾起舞的日子,都是对生命的辜负。 目录 前言: 一只单身狗: 两只单身狗: 前言&#x…

HTTPS安全套接字层超文本传输协议

HTTPS安全套接字层超文本传输协议 HTTPS简介HTTPS和HTTP的主要区别客户端在使用HTTPS方式与Web服务器通信时的步骤SSL/TLS协议的加密(握手)过程为什么数据传输阶段使用对称加密HTTPS 的优点HTTPS 的缺点HTTPS 的优化证书优化会话复用 HTTPS简介 HTTP协议…

Keil系列教程07_Configuration(一)

1写在前面 本文带来的内容为“Configuration”,即配置。而这里的“配置”和前面“工程目标选项配置”是完全不同的两种配置。 工程目标选项配置是针对工程目标,保存在工程文件(.uvprojx和.uvoptx)。这里的Configuration是针对IDE…

在本地git仓库查看远端的URL

右键调出选项栏 选择git-远端,选择远端的内容就可以看到URL了

数据结构之时间复杂度

目录 一、时间复杂度的概念 二、大O的渐进表示法 三、常见时间复杂度计算举例 一、时间复杂度的概念 时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从…

OpenCV图像处理-图像分割-MeanShift

MeanShift 1. 基本概念2.代码示例 1. 基本概念 MeanShift严格说来并不是用来对图像进行分割的,而是在色彩层面的平滑滤波。它会中和色彩分布相近的颜色,平滑色彩细节,侵蚀掉面积较小的的颜色区域,它以图像上任意一点P为圆心&…

架构重构实践心得

一、前言 大多数的技术研发都对重构有所了解,而每个研发又都有自己的理解。从代码重构到架构重构,我参与了携程大型全链路重构项目,积累了一点经验心得,在此抛砖引玉和大家分享。 二、重构的定义 重构是指在不改变外部行为的情…

MySQL数据库(十)

目录 一、Java的数据库编程:JDBC 1.1JDBC工作原理 二、Java具体连接数据库 2.1准备过程 2.2代码连接数据库 一、Java的数据库编程:JDBC JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API&…

华为认证HCIA-HCIP-HCIEdatacom题库解析+机构视频+实验

题库包含有2023年最新HCIA-datacom题库、HCIP-datacom题库,HCIE-datacom题库, 云计算HCIA,HCIP题库,云服务HCIA,HCIP题库,华为存储HCIP题库,华为安全HCIP题库 ,学习笔记,…

webrtc QOS笔记 Nack机制浅析

nack源码浅析 Video Nack 机制概述 nack的机制非常简洁,收到非连续的packet seq 会将丢包的seq插入自身nack_list缓存, 之后立即发送一次那组丢包的seq重传请求, 之后如果超时仍然没有收到重传回来的seq, 就通过定时任务继续发送. nack 三个缓存list nack_list_ : 用于记录已丢…

10分钟内入门 ArcGIS Pro

本文来源:GIS荟 大家好,这篇文章大概会花费你10分钟的时间,带你入门 ArcGIS Pro 的使用,不过前提是你有 ArcMap 使用经验。 我将从工程文件组织方式、软件界面、常用功能、编辑器、制图这5个维度给大家介绍。 演示使用的 ArcGI…

【SQL应知应会】表分区(一)• Oracle版

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle 分区表 • Oracle版 前言一、分区表1.什么是表分区…

《电脑城的衰退:时代变迁中的背影》

随着科技的不断进步和电子商务的兴起,电脑城这个曾经火爆的地方正逐渐走向衰退甚至面临消失。对于这一变迁,我认为既有利也有弊。 首先,电脑城的衰退带来了一定的便利。传统的电脑城通常拥有大量的实体店铺,买家必须亲自前往选择…

Qt/C++音视频开发49-多级连保存和推流设计(同时保存到多个文件/推流到多个平台)

一、前言 近期遇到个用户需要多级联的保存和推流,在ffmpegsave多线程保存类中实现这个功能,越简单越好,就是在推流的同时,能够开启自动转储功能,一边推流的同时一边录像保存到本地视频文件。最初设想的一个方案是new两…

LeetCode515. 在每个树行中找最大值

515. 在每个树行中找最大值 文章目录 [515. 在每个树行中找最大值](https://leetcode.cn/problems/find-largest-value-in-each-tree-row/)一、题目二、题解 一、题目 给定一棵二叉树的根节点 root ,请找出该二叉树中每一层的最大值。 示例1: 输入: ro…

Nginx配置解析

server {listen 80;server_name example.com;location / {proxy_pass http://backend;}location / 是 Nginx 的一个匹配规则,用于匹配所有请求路径。proxy_pass 指令则用于将匹配到的请求转发给指定的后端服务器。下面是关于 location / 和 proxy_pass 的详细介绍&a…