AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

领域事件与最终一致性

  • 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:005584

评论

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

aixbt 被盗 55.5 ETH,本就孱弱的 AI 代理叙事会「雪上加霜」吗

TechubNews

以太坊 AI

《北京日报》点赞!融云助力打造“数字丝路”新范式

融云 RongCloud

AI数字人的开发框架

北京木奇移动技术有限公司

AI智能体 软件外包公司 AI数字人

【Redis技术进阶之路】「原理分析系列开篇」探索事件驱动枚型与数据特久化原理实现(数据持久化的实现RDB)

码界西柚

redis RDB 快照 redis 底层原理 数据持久化

一个好的产品应该具备什么要素?

执于业务

架构师必看!现代应用架构发展趋势与数据库选型建议丨TiDB vs MySQL 专题(一)

PingCAP

分布式 TiDB #Mysql

智能制造:企业组织发展与IT信息技术发展的关系

积木链小链

数字化转型 信息技术 智能制造

ClkLog埋点系统客户案例-电子签佼佼者「大家签」为何选择ClkLog?

ClkLog

开源 埋点 用户行为分析 自定义标签

Apache SeaTunnel脚本升级及参数调优实战

Apache SeaTunnel

Java 24(JDK 24)新特性详细介绍

AiDaddy

#java #java24 #jdk24 #jdk jdk24新特性

“人工智能+”智赋千行百业!

天翼云开发者社区

人工智能 数字中国 DeepSeek

Fabric8 Kubernetes 教程——客户端基础

FunTester

云原生时代,如何构建适合自身的 IDP

蚂蚁开源

开源 云原生 蚂蚁 蚂蚁开源

从 0 到 1,掌握微店商品详情数据接口

tbapi

微店商品详情接口 微店API 微店商品数据采集

AI领航:智能商品管理如何引爆时尚零售增长新引擎?

第七在线

一文读懂!微店商品列表数据接口全指南

tbapi

微店API 微店商品数据采集 微店商品列表接口 关键词搜索微店商品接口

发挥技能优势,实现财务数字转型

智达方通

数字化转型 全面预算管理

泄密与间谍:网络安全与国家安全的紧密联系

黑龙江陆陆信息测评部

网络安全 等保测评 网络安全信息安全、

零基础IM开发入门(五):什么是IM系统的端到端加密?

JackJiang

即时通讯 IM

数字先锋 | 如何提升工业园区算力服务,天翼云息壤给出答案!

天翼云开发者社区

云计算 数字化转型 算力服务

10分钟部署!一文读懂NineData社区版强在哪里?

NineData

数据库、 NineData 对比工具 测评对比 NineData社区版

项目管理协作工具对比:PingCode vs Leangoo

axe

项目管理工具 PingCode 办公软件 项目协作工具 leangoo

CST软件如何理解Axial Ratio轴比

思茂信息

cst cst操作 cst电磁仿真 CST软件 CST Studio Suite

如何用Leangoo破解需求隔离与频繁变更的协作困局?

云端拾光

项目管理 效率工具 团队协作 任务管理 看板软件

《Operating System Concepts》阅读笔记:p408-p448

codists

操作系统

新闻速递丨Altair中国合作伙伴大会圆满落幕:以AI与HPC技术融合,共筑智造新生态

Altair RapidMiner

云计算 HPC 制造业 智能制造 仿真软件

DNSSEC是什么?DNSSEC有什么用?

国科云

AI数字人开发的技术难点

北京木奇移动技术有限公司

AI智能体 软件外包公司 AI数字人

数字化转型 2.0:AI、低代码与智能分析如何重塑企业竞争力?

天津汇柏科技有限公司

AI 低代码 数字化转型

Hyperliquid巨鲸50倍做空赚510万对其会有何影响

TechubNews

比特币 以太坊 合约

数据可信安全流通实战|隐语开源社区Meetup武汉站

隐语SecretFlow

Python #大数据 AI'

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