速来报名!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:005238

评论

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

Klocwork 2022.1推出Kotlin分析引擎

龙智—DevSecOps解决方案

klocwork perforce

自助洗车机投放在哪里比较好?

共享电单车厂家

自助洗车加盟 车白兔自助洗车 自助洗车机投放 自助洗车场地

当家里小神兽睡醒乱爬导致摔下床后,我决定做点啥

BUG侦探

Python OpenCV WebRTC

元宇宙与数字经济的互相融合,PlatoFarm的通证经济模型是根本

西柚子

在nginx中使用proxy protocol协议

程序那些事

Java nginx 网络协议 程序那些事 5月月更

架构实战营作业五

热猫

AIRIOT物联网低代码平台如何配置http客户端?

AIRIOT

物联网 HTTP 低代码平台

融云一图看懂 | 居家办公的正确姿势

融云 RongCloud

Golang名库观止 | 配置解析神器viper使用详解

程序员读书

Go golng golang 面试

明道云APaaS在酒店业中的应用场景例举

明道云

客户体验和客户服务的区别

龙国富

客户服务 客户体验管理

游戏美术和设计师的福音,Helix DAM 测试版来了!

龙智—DevSecOps解决方案

perforce Helix DAM

自助洗车怎么洗?来看看洗车教程

共享电单车厂家

自助洗车加盟 自助洗车怎么洗 自助洗车机使用

6元自助洗车怎么加盟?有啥门槛

共享电单车厂家

自助洗车怎么加盟 6元自助洗车 自助洗车加盟门槛

小插件大功能!轻量化森BIM插件手把手教学

ThingJS数字孪生引擎

插件 数字孪生 BIM

首次全面定义,《2022企业应用运维管理指标体系白皮书》重磅发布

博睿数据

白皮书 博睿数据

​对 Jenkins 和 CloudBees CI 的 UI 改进

龙智—DevSecOps解决方案

CloudBees

“微博评论”的高性能高可用计算架构

Dean.Zhang

新升级!网易数帆轻舟中间件推出运维稳定性管控服务

网易数帆

Kubernetes 运维 云原生 中间件 稳定性

自助洗车机如何使用?其实很简单

共享电单车厂家

自助洗车加盟 自助洗车机使用

关于electron-builder打包遇到的一点点问题

空城机

Electron Node 5月月更

Apache Calcite SQL验证

不穿格子衬衫的程序员

数据库 大数据 SQL解析 Apche Calcite

数据中心进入“液冷时代”,曙光引领绿色变革

WorkPlus

GaussDB(for Redis)新特性发布:前缀搜索千倍提升与集群版多租隔离

华为云开发者联盟

redis GaussDB(for Redis) 缓存数据库 多租隔离 前缀搜索

自助洗车机投放应该注意哪些问题?

共享电单车厂家

自助洗车加盟 自助洗车机投放 自助洗车场地

钉钉宜搭发布大学生低代码实践计划,一起为公益发光发热!

一只大光圈

低代码 公益 钉钉宜搭

最佳实践 | 用腾讯云AI文字识别从0到1实现通信行程卡识别

牵着蜗牛去散步

腾讯 文字识别 技术实践 腾讯云AI 疫情防控

2022年国内外好用的10大甘特图软件(团队使用)

爱吃小舅的鱼

项目管理 Worktile 研发管理 甘特图 PingCode

关于数据一致性解决方案

穿过生命散发芬芳

数据一致性 5月月更

Nebula Graph|信息图谱在携程酒店的应用

NebulaGraph

图数据库 知识图谱 NebulaGraph

一些销售术语

刘旭东

5月月更 销售术语

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