全栈算力,加速行业AI落地 了解详情
写点什么

领域事件与最终一致性

  • 2015-10-08
  • 本文字数:1085 字

    阅读完需:约 4 分钟

领域事件代表了领域中发生的某些事情, 当 Eric Evan 原创的 DDD 书本发行的时候并没有把它定义为一种领域驱动设计 (DDD) 模式,但现在在DDD 中已经是一种战术元素,而且是一个完整的领域模型成员。 最终一致性 是一种改进规模和性能的设计方法,而且领域事件能作为触发器承载领域信息进而协助实现, Florin Preda 在最近的博客文章 中作出了解析。

对于多数开发者都很熟悉的事务型一致性工作流中,客户在系统中执行一个命令,这个系统为维护事务中的领域一致性的需要而运行所有操作。当操作全部成功或全部失败的时候客户会收到反馈,没有中间地带。

对于常见于分布式系统的最终一致性工作流中,客户同样在系统中执行一个命令,但这个系统只为维护事务中的领域一致性运行部分的操作。剩余的操作在系统前后一致后运行。

Preda 指出虽然事务型一致性看起来更加直观和容易使用,但他觉得某些场景中最终一致性有一点优势。在他描述的四种场景中,用 A 操作之后进行 B 操作来作为例子:

  1. 操作 B 执行时间长。
  2. 操作 B 本来就是异步的,例如依赖了一个异步机制。
  3. 操作 B 是通过在相同的 有界上下文 中使用不同于操作 A 的聚合
  4. 操作 B 在不同于操作 A 的有界上下文中执行。

Preda 将场景 3 和 4 关联到领域驱动设计(DDD),他相信在这两种场景中选择最终一致性将引导到比使用传统事务工作更好的设计。领域事件在这里可以很有用。领域事件是在领域专家相关的领域中发生的某些事情的代表,它们通过作为触发器启动工作流的下一个步骤和承载领域信息需求来促进最终一致性。

写同一主题的 Mike Mogosanu 声称在现实世界的用例中 事务型一致性工作流很罕见;一个业务流程经常包含一系列的用例和使用 Unit of Work (UoW) 模式去持久化一组更改,从技术观点来看,它幼稚的解决方案会将事情复杂化,尤其是在分布式应用中。

Mogosanu 相信一个包含不同有界上下文的业务流程应该考虑变为最终一致性,其在每个有界上下文中有最少一个领域用例。领域用例负责让聚合保持始终如一,在这里 UoW 模式会很有用,而且公布触发其它用例启动的领域事件,最终可以把整个系统带到一致的状态。

为了举例说明他的想法,在实现用 Azure Service Bus 消息系统来做事件传送的 C# 应用 中,Preda 使用了 Vaughn Vernon 在书本 实现领域驱动设计 中提到的设计的一个简化版本。

查看英文原文: Domain Events and Eventual Consistency


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-10-08 19:005097

评论

发布
暂无评论
发现更多内容

设备二维码怎么生成?三分钟即可搞定

草料二维码

二维码 二维码生成 草料二维码 设备巡检二维码 设备二维码

Java程序员:从青铜到王者的薪资变化

这我可不懂

3分钟讲透服装行业数字化转型新方案!附服装数字化成功案例

优秀

数字化转型 服装产业

通义灵码企业版正式发布,满足企业私域知识检索、数据合规、统一管理等需求

阿里巴巴云原生

阿里云 云原生 通义灵码

如何设计与构建 FinOps 流程、团队、体系与目标

阿里巴巴云原生

阿里云 云原生 FinOps

6个步骤解析“用户运营”

养心进行时

运营 产品运营 用户分析 用户运营

用户研究系列之“心流”解析

养心进行时

用户研究 心流 用户画像分析 用户特征分析 福流

Polygon市值机器人

开发丨飞机丨 @aivenli

用户研究之全面解析Persona

养心进行时

用户研究 用户行为分析 用户分析 用户画像 用户特征分析

TikTok海外运营:云手机的四种快速变现方法

Ogcloud

云手机 海外云手机 云手机海外版 跨境云手机 tiktok运营

算法人生(17):从“课程学习”到“逐步暴露心理疗法”

养心进行时

人工智能 机器学习 AI 算法 #算法

ETLCloud中如何执行Java Bean脚本

RestCloud

Java 脚本 ETL JavaBean

阿里云可观测 2024 年 4 月产品动态

阿里巴巴云原生

阿里云 云原生 可观测

云效 Pipeline as Code 来了!这些场景,用好它效率翻倍!

阿里巴巴云原生

阿里云 云原生 云效

云效 Pipeline as Code 来了!这些场景,用好它效率翻倍!

阿里云云效

阿里云 云原生 云效

低代码赋能物流,助力数字物流更高效

EquatorCoco

软件测试学习笔记丨黑盒测试-边界值

测试人

软件测试

以太ETH链市值机器人

开发丨飞机丨 @aivenli

谈谈分布式事务原理

快乐非自愿限量之名

分布式

算法人生(16):从“K均值 & C均值”看“为人处事之道”

养心进行时

人工智能 机器学习 算法 K-Means #算法

如何打破数据管理僵局,释放数据资产价值?[AMT企源案例]

AMT企源

数据库 数据资产 数据管理 主数据

通义灵码企业版正式发布,满足企业私域知识检索、数据合规、统一管理等需求

阿里云云效

阿里云 云原生 云效 通义灵码

开发大型体育赛事直播平台:现成源码解决方案有哪些功能

软件开发-梦幻运营部

HTTP 报文详解

快乐非自愿限量之名

网络协议 网络 HTTP

海外云手机解决海外社交媒体运营难题

Ogcloud

云手机 海外云手机 云手机海外版 美国云手机 海外云手机推荐

拿捏这12个Java开发框架,轻松拿到30K+

伤感汤姆布利柏

数智制造:机器学习与人工智能的全方位渗透

不在线第一只蜗牛

人工智能 机器学习 数智制造

C#实现多线程的几种方式

EquatorCoco

Java C# JVM

XTransfer5月产研岗位热招

XTransfer技术

使用Lambda表达式和接口的简单Java 8 Predicate示例

码语者

软件测试学习笔记丨JIRA-Bug管理流程定制

测试人

软件测试

领域事件与最终一致性_语言 & 开发_Jan Stenberg_InfoQ精选文章