当前位置:首页 > 科技  > 软件

六边形架构:管理复杂性的解决方案

来源: 责编: 时间:2023-12-13 17:02:21 339观看
导读六边形架构是一种将外部系统与核心应用程序分离的架构模式。六边形架构是什么?六边形架构是一种架构模式,将外部系统与核心应用程序分隔开来。其思想很简单。我们从一个六边形开始。然后应用端口和适配器,对吧?六边形有六

六边形架构是一种将外部系统与核心应用程序分离的架构模式。3Zk28资讯网——每日最新资讯28at.com

3Zk28资讯网——每日最新资讯28at.com

六边形架构是什么?

六边形架构是一种架构模式,将外部系统与核心应用程序分隔开来。3Zk28资讯网——每日最新资讯28at.com

其思想很简单。我们从一个六边形开始。然后应用端口和适配器,对吧?3Zk28资讯网——每日最新资讯28at.com

六边形有六个边。六边形的形状本身并没有特别含义。它只是提供了一种清晰的方式来讨论和解释应用程序的端口、适配器和领域。3Zk28资讯网——每日最新资讯28at.com

这个形状提供了一种解释应用程序流程中小块内容的方式,而不会让观众对整个应用程序的图景感到不知所措。它本质上限制了设计者一次只设计或解释小块容易理解的部分。3Zk28资讯网——每日最新资讯28at.com

从内部开始

应用程序领域位于六边形的内部。当我们说领域时,我们指的是遵循领域驱动设计(DDD)原则,并且我们的业务逻辑不会泄露到六边形外部。为了上下文,DDD:3Zk28资讯网——每日最新资讯28at.com

  • 专注于通过定义与业务特定部分相关的模型来解决主要问题。
  • 使用所有团队成员都能理解的通用语言。
  • 定义了一个边界上下文,其中封装了领域模型。

遵循DDD原则,为了本文的目的,我使用以下过程提出了以下领域。3Zk28资讯网——每日最新资讯28at.com

假设我们正在构建一个新的应用程序,允许用户通过网站将文件上传到一个中央存储库以供共享。3Zk28资讯网——每日最新资讯28at.com

以下是一些基本的应用程序要求:3Zk28资讯网——每日最新资讯28at.com

  • 由经过身份验证的用户通过网站上传文件。
  • 文件是为程序上传的,或者换句话说是为了某个目的上传的。
  • 程序/目的是一组预先配置的文件规范,文件必须符合这些规范。
  • 程序规则指定一些内容,比如:— 可以上传的文件类型— 字段数量— 其他要求,比如加密或压缩文件— 文件必须符合某些规范才能被接受。
  • 必须授权用户以上传特定程序的文件。

返回领域

领域表示应用程序的关键业务逻辑,允许用户将文件上传到存储库以供其他方共享。请注意,以下领域只涵盖了上传者、上传者的授权和要上传的文件的文件规格。3Zk28资讯网——每日最新资讯28at.com

蓝色矩形被称为实体,它们连同蓝色字段一起表示满足我们功能要求所需的结构。3Zk28资讯网——每日最新资讯28at.com

3Zk28资讯网——每日最新资讯28at.com

一个更全面的领域模型可能包括已上传或已下载文件的下载者和文件配置详情,以及可能应用的数据质量配置。可以争论说这可以进一步划分为子领域,但为了简洁起见,我们将坚持当前的示例。3Zk28资讯网——每日最新资讯28at.com

从逻辑上讲,我们的六边形现在看起来像这样:3Zk28资讯网——每日最新资讯28at.com

3Zk28资讯网——每日最新资讯28at.com

众所周知六边形架构的原则之一是领域不泄露到六边形外部,也不需要了解外部世界的任何信息。3Zk28资讯网——每日最新资讯28at.com

在这一点上,我们可以从理论上写出满足这个应用程序基本要求的代码,从业务逻辑功能的角度来看,这将是纯粹的应用程序代码开发。然而,这并不能帮助我们太多,因为业务逻辑被包装在六边形的外边界之内。3Zk28资讯网——每日最新资讯28at.com

我们需要一些输入和输出,所以现在我们做一些关于我们如何与领域交互的假设。3Zk28资讯网——每日最新资讯28at.com

在最简单的形式下,这些假设听起来像这样:3Zk28资讯网——每日最新资讯28at.com

  • 数据以用户的请求形式提交,可以是信息请求或上传文件。(输入)
  • 这些数据经过验证、转换并存储在某个地方。(输出)

我们需要与这个领域交互,以便它能够完成其工作,即授权上传者、接受文件并检查文件规格(基于程序/目的)是否有效。3Zk28资讯网——每日最新资讯28at.com

让我们稍作停顿,因为上述两个步骤提到了该架构的另一个好处。在这种纯粹形式下,可以实现单元测试或测试驱动开发(TDD)。3Zk28资讯网——每日最新资讯28at.com

编写自动化单元测试可在开发过程中或进行增强时运行,可以减少引入错误的风险,提高代码质量,尤其是如果单元测试作为代码检入和部署活动的一部分进行运行(考虑持续集成/持续交付)。3Zk28资讯网——每日最新资讯28at.com

如果你在遵循TDD,你会先在代码中写一个单元测试,然后再写任何功能性代码。该测试将失败,因为你尚未编写任何功能性代码。然后,你编写满足测试的功能性代码。接着你编写下一个测试,然后功能性代码,然后测试,依此类推。3Zk28资讯网——每日最新资讯28at.com

这就是本文的全部内容。现在我们已经了解了什么是六边形架构,并创建了我们的领域模型,下一篇我们将探讨如何连接端口和适配器,使架构能够开始管理复杂性。3Zk28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-44403-0.html六边形架构:管理复杂性的解决方案

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 现代C++中的原子(std::atomic):详解、代码及应用

下一篇: 软件开发者必备知识框架:代码版本控制Git,DevOps 和 CI/CD的整合

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 六大权益!华为8月服务日开启:手机免费贴膜、维修免人工费

    8月5日消息,一年一度的华为开发者大会2023(Together)日前在松山湖拉开帷幕,与此同时,华为8月服务日也式开启,到店可享六大专属权益。华为用户可在华为商城Ap
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 不容错过的MSBuild技巧,必备用法详解和实践指南

    一、MSBuild简介MSBuild是一种基于XML的构建引擎,用于在.NET Framework和.NET Core应用程序中自动化构建过程。它是Visual Studio的构建引擎,可在命令行或其他构建工具中使用
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人员可能会涉及各种各样的安全任务,包括但不限于:开发某些安全工具的插件,满足自己特定的安全需求;自定义github搜索工具,快速查找所需的安全资料、漏洞poc、exp
  • OPPO K11评测:旗舰级IMX890加持 2000元档最强影像手机

    【Techweb评测】中端机型用户群体巨大,占了中国目前手机市场的大头,一直以来都是各手机品牌的“必争之地”,其中OPPO K系列机型一直以来都以高品质、
  • 质感不错!OPPO K11渲染图曝光:旗舰IMX890传感器首次下放

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
Top