利用简单的事件驱动组件简化系统

  • Jan Stenberg
  • 臧秀涛

2013 年 6 月 7 日

话题:设计模式语言 & 开发架构

在小型业务组件之间使用事件进行交互可以简化系统,Russ Miles最近就谈到了“为敏捷软件编写简单的、事件驱动的组件”这一主题。

一个月前,Russ 在演讲中探讨了“利用事件简化系统架构”,奠定了简化系统这一理念的基础,他建议采用通过彼此合作的组件来交换事件这种架构。这次演讲正是承接上次演讲而来的。

之所以使用这种设计,Russ 的目标是让组件随应用或系统的改变而改变,避免牵一发而动全身。

在最近的演讲中,Russ 专注于组件,而且他将“简化”作为一个原则来降低组件间的耦合。一个组件是不是简单直接?有个很好的衡量标准,看看这个组件是不是容易移动。如果很难移动,就说明组件太复杂了。他把复杂的组件比作圣诞树上的灯,牵一发而动全身。

为了简化复杂的组件,他首先把关注点和副作用分离开来,将它们移动到新的、更小的组件或函数中。关于副作用有一个例子,就是将副作用与外部世界集成到一起,比如 Russ 将日志看做一个应该移到基础架构中的关注点。

事件是在组件之间传递数据的机制,这就带来了位置耦合,因为发送方需要知道接收方的位置,不过通过引入一个带有事件分发器的中间事件域,可以去掉这种耦合。

事件可以是从一个组件移动到另一个组件的共享的不可变类,这是事件最简单的形式,但这也会引入耦合。为了降低复杂性,Russ 的下一步是以具名参数的形式用数据来替换该类,比如键值对的映射。

这种设计的缺点是引入了间接性。Russ 认为该设计并没有增加复杂性,但推迟了可能出现的潜在问题。解决该问题的方法就是在两个组件之间进行大量测试,其中包括单元测试和集成测试。

查看英文原文:Build Simplicity into a System with Simple Event-Driven Components

设计模式语言 & 开发架构