news 2026/3/31 13:07:30

六边形架构补充 - 第五章 - DDD领域模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
六边形架构补充 - 第五章 - DDD领域模型

六边形架构

六边形架构的由基础设施层、用户接口层、应用层和领域层组成。领域层封装核心的业务逻辑,然后由应用层进行业务逻辑的编排。接口层和基础设置层在六边形架构中分别属于输入端口和输出端口,然后在进行端口的适配。

领域层:位于最底部,是整个系统的核心。它封装了最纯粹的业务逻辑(实体、规则、流程),不依赖于任何外部层次(如应用层、基础设施层)。它是系统中最稳定、最不易变化的部分。
应用层:位于领域层之上。它负责协调和编排领域对象来完成具体的用例或用户故事(例如“用户下单”、“审批流程”)。它依赖于领域层,并可能调用基础设施层(如图中箭头所示)来辅助完成工作(如发送消息、访问文件)。
用户接口层:位于应用层之上。它负责处理用户的输入(如HTTP请求、命令行指令),并将其转化为应用层能理解的指令。它依赖于应用层(也可能直接调用领域层,但更佳实践是通过应用层),同时也依赖基础设施层提供的具体技术实现(如Web框架、序列化工具)。
基础设施层:位于最外层(图中最上方)。它包含了所有具体的技术实现细节,如数据库存取、消息队列、外部API调用、文件系统操作等。它的依赖方向是关键:在整洁架构中,基础设施层实现领域层或应用层定义的抽象接口(端口),因此箭头在图上虽然从下层指向它,但代码依赖关系是倒置的

层与层之间调用关系

如下图所示:

整个流程遵循“请求驱动”与“事件驱动”两条主线:

  1. 同步请求处理流(自上而下)
    入口:来自应用终端的请求,首先到达API网关。
    控制流转:API网关将请求路由至用户接口层的Facade。Facade调用应用层的应用服务。
    业务执行:应用服务编排领域层的聚合和领域服务执行业务逻辑。在此过程中,应用服务通过仓储接口获取或保存数据。
    数据持久化:仓储接口的具体调用,会由基础层的仓储实现来执行,从而操作DB或文件。

  2. 异步事件驱动流(通过消息队列)
    内部事件发布:当应用层完成某个操作(如订单已支付),其事件发布组件会向消息队列发布一个领域事件。
    外部服务消费:外部的其他微服务(图下方微服务外模块)会订阅该事件,并在其应用服务中处理,实现系统间的解耦集成。
    响应外部事件:同样,外部微服务发布的事件,会被本系统应用层的事件订阅组件监听,并触发本系统的应用服务做出响应,完成业务闭环。

清晰架构

如下图所示:

这张图片的核心内容是阐述了“清晰架构”(Clean Architecture,常被称为“洋葱架构”)的核心设计理念与运行机制。

  1. 核心模式:以领域模型为中心的同心分层

架构图像一个洋葱,由内到外是:
最内层 - 领域层:包含核心业务实体与规则,是系统中最稳定、最纯粹的部分。
中间层 - 应用层:包含应用服务,负责编排领域对象来实现具体的用例,它依赖于领域层。
最外层 - 接口与基础设施:包含用户界面(UI)、API、数据库等具体实现细节。这一层是易变的,会随技术选型而改变。
最关键的原则是:依赖永远指向内部。外层依赖内层,内层对外层一无所知。这意味着业务逻辑完全独立于数据库、Web框架等外部技术。

  1. 关键机制:端口与适配器

这是架构实现“依赖倒置”的具体手段:
端口:由内层(领域/应用层)定义的抽象接口(例如,一个仓储接口)。它声明“系统需要什么功能”。
适配器:
主/主动适配器(如HTTP控制器、CLI命令):将外部输入(如HTTP请求)适配成对内部应用服务的调用。
从/被动适配器(如数据库ORM实现、消息客户端):适配内部定义的端口,提供具体的技术实现(如连接MySQL)。
通过这个机制,外部世界的任何变化,都只需要更换或修改对应的“适配器”,而核心业务代码纹丝不动。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 14:12:22

一键 i18n 国际化神库!适配 Vue、React!

一键 i18n 国际化神库!适配 Vue、React! 作为一名前端开发,给项目做多语言早已是家常便饭。 可每次面对成百上千条文案,“一行行手动翻译 维护 N 个 JSON 文件”仍然是让人头秃的体力活。 今天就把我实测有效的 3 款零入侵、一…

作者头像 李华
网站建设 2026/3/31 4:03:07

LobeChat能否用于创建商业模式画布?创业项目策划助手

LobeChat:打造你的AI创业策划助手 在今天这个“人人都是产品经理”的时代,一个绝妙的创意可能诞生于咖啡馆的一次闲聊,也可能来自深夜灵光乍现的备忘录。但真正让想法落地的,不是灵感本身,而是如何快速、系统地把它转化…

作者头像 李华
网站建设 2026/3/26 23:03:22

QML/QtQuick3D如何将数据传递给GLSL着色器?

QML 传递给 GLSL Shader中Uniform变量的工作原理详解 QML/QtQuick3D如何将数据传递给GLSL着色器? 例如 // 在Shader代码中直接使用 pos.x (c0 c1 * pos.z c2 * pos.z * pos.z c3 * pos.z * pos.z * pos.z);中c0, c1, c2, c3 在着色器中没有声明但是又可以直接…

作者头像 李华
网站建设 2026/3/27 2:23:39

RocketMQ 监控与告警:Prometheus + Grafana 可视化监控搭建

在分布式消息中间件的生产实践中,“看得见”才能“控得住”。RocketMQ作为阿里开源的高性能消息队列,其运行状态直接影响业务链路的稳定性。本文将聚焦RocketMQ监控体系的核心搭建方案——基于Prometheus采集指标、Grafana可视化展示,带你从零…

作者头像 李华
网站建设 2026/3/25 8:43:54

RocketMQ Broker 故障恢复:主从切换、数据同步与集群自愈机制

在分布式消息中间件的架构中,RocketMQ 凭借高吞吐、低延迟的特性占据重要地位,而 Broker 作为消息存储与转发的核心节点,其可用性直接决定了整个消息系统的稳定性。一旦 Broker 出现故障,如何快速实现故障恢复、保障消息不丢失、业…

作者头像 李华
网站建设 2026/3/28 7:40:01

ip版SSL证书

解决获得一本被浏览器信任的IP版本的SSL证书,你必须满足以下条件:1、这是一个公网的IP地址(虽然有的机构可以用局域网IP地址颁发证书,但由于局域网IP存在不具有唯一性,所以有一定风险,而且可以容易被仿照&a…

作者头像 李华