写点什么

Vaughn Vernon 谈论响应式领域驱动设计

2013 年 11 月 21 日

将 Actor 模型与领域驱动设计(DDD)结合使用,你或许能够避免在传统的事件驱动或 Hexagonal 架构中所经常面对的一些架构上的负担。《Implementing Domain-Driven Design》一书的作者 Vaughn Vernon 最近在一个关于使用 Scala 与 Akka (Actor 模型的一种实现)进行响应式 DDD 编程的讲座中对这一话题进行了讲解。

人们最近经常使用的这个新术语“响应式”其实已经不是什么新鲜的概念了,许多人已经熟悉了对事件和消息进行响应的方式,但它在 DDD 中的应用却为我们习惯的方式带来了一些改变。在进一步进行解释之前,Vaughn 对 Actor 模型的一些基本特性进行了定义:

  • 直接异步消息传递,它表示某个 Actor 以异步的方式直接向另一个 Actor 发送了一条消息。
  • 无锁并行。Actor 不对锁进行处理,而是由基础架构进行处理。
  • 无共享。Actor 互相之间对对方的内部状态一无所知。

促使 Vaughn 选择使用 DDD 方式的主要动机之一,是他希望以一种非常明确的方式对业务的核心部分进行建模。而在一个传统的事件驱动架构中,我们除了明确了领域模型的设计之外,领域事件同样也表现了一部分领域概念。这种方式依然没有达到完全的清晰化的目的,因为一旦领域事件被发布之后,要在代码中找出究竟在哪里对事件进行了响应,以及它最终对整个模型产生了怎样的影响,这并不是一件简单的事。

与事件驱动架构相反,Vaughn 发现 Actor 模型能够表现得非常明确。当某个 actor 向另一个 actor 发送消息,必须在代码中非常明确地表现出来。Vaughn 所面对的一个问题是,结合使用 Actor 模型与 DDD 能为我们带来多大的好处?难道好处仅仅是我们可以使用与以往相同的架构,在各个 Aggregate 之间发送消息而已吗?他对此疑问的回答是否定的,他相信这种方式可以使我们避免在传统的事件驱动或 Hexagonal 架构中所经常面对的一些架构上的负担。他认为只要有一种合适的框架,我们就可以将整个架构简单地分解为 Controller 和 Aggregate 两种组件,而 Actor 可扮演控制器的角色,它知道如何将消息发送给模型中的各个 Aggregate 以进行交互。

Vaughn 认为 Actor 模型与 DDD 的结合使用方式是没有什么限制的,对于任何需要实现高伸缩性、高可用性和低延迟的系统来说这一方式都是可用的。Akka 是基于 Java 虚拟机(JVM)编写的,不过 Vaughn 正在致力于实现 Akka.NET,它将把 Akka 移植到 C#和 F#语言上。

Vaughn 在今年早期对结合使用 Actor 模型与 DDD 的基础知识的发表了一份文章。

响应式宣言(Reactive Manifesto)于2013 年9 月发布,它描述了这个概念中包含的各种核心思想。

查看英文原文: Vaughn Vernon: Reactive Domain-Driven Design

2013 年 11 月 21 日 07:591268
用户头像

发布了 428 篇内容, 共 153.1 次阅读, 收获喜欢 27 次。

关注

评论

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

前端vue在可视化大屏领域的工作实践

孙叫兽

Vue 可视化 eCharts 可视化地图

spring-beans 注册 Beans(二) springboot启动流程

梦倚栏杆

git stash误使用drop删掉本地保存,恢复代码一次记录

良知犹存

git

新手模拟实现call和apply

前端树洞

前端开发 js this JavaScrip

模块五 作业

薛定谔的指南针

架构实战营

从水晶宫到甲秀楼:在数博会读懂智慧城市的“大工业时代”

脑极体

花费3680元买了一个慕课网的Java就业班课程,里面竟然有自己写的开源项目!

十三

Java 开源 知识产权 springboot 开源项目

架构训练营模块五作业

Geek_e0c25c

架构训练营 架构实战营

spring-beans 注册 Beans(三) ConfigurationClassPostProcessor处理BeanDefinition流程

梦倚栏杆

模块5作业 微博评论高性能高可用计算架构

TH

架构实战营

模块五-微博评论高性能高可用计算架构

彬

华仔架构训练营

作业

CR

架构实战营模块5

阿体

架构实战营5 作业

梦寻解语花

架构实战营

架构训练营——模块五作业——微博评论

开拓纪

架构训练营 模块五 微博评论

用Docker的方式编译OpenVINO

IT蜗壳-Tango

6 月日更

Proxy 对象简介

编程三昧

JavaScript 前端 ES6 Proxy

架构模块5作业

小野兽🇬 🇱 

架构训练营

模块五:课后作业

黄嘉治

JVM之内存管理

邱学喆

JVM 内存管理 垃圾回收算法 垃圾回收器

架构实战营 模块五课后作业

iProcess

架构实战营

模块5 学习总结

TH

架构实战营

架构实战营 模块五作业

Dylan

架构实战营

kubelet之volume manager源码分析

良凯尔

Kubernetes 源码分析 kubelet Ceph CSI

go训练营第二周作业

涛

架构实战营模块五作业

冷大大

作业 架构实战营 模块五

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

小荷才露尖尖角

#架构实战营

【Vue2.x 源码学习】第六篇 - 数据代理的实现

Brave

源码 vue2 6月日更

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

小遵

运动居然成了我的奢侈品?

悟空聊架构

程序员 程序人生 运动 6 月日更

模块5作业

大肚皮狒狒

低代码的认知误区与落地实践

低代码的认知误区与落地实践

Vaughn Vernon谈论响应式领域驱动设计-InfoQ