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

将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

你可能感兴趣的:(Vaughn Vernon谈论响应式领域驱动设计)