写点什么

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