BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Jan Stenberg 关注 29 他的粉丝 ,译者 邵思华 关注 3 他的粉丝 发布于 2013年11月22日. 估计阅读时间: 3 分钟 | GMTC大前端的下一站,PWA、Web框架、Node等最新最热的大前端话题邀你一起共同探讨。

Actor模型领域驱动设计(DDD)结合使用,你或许能够避免在传统的事件驱动Hexagonal架构中所经常面对的一些架构上的负担。《Implementing Domain-Driven Design》一书的作者Vaughn Vernon最近在一个关于使用ScalaAkka(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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT