领域事件、事件风暴
领域事件:
领域专家所关心的在领域中的一些事件。
将领域中所发生的活动建模城一系列的离散事件。每个事件都用领域对象来表示。
领域事件是领域模型的组成部分,表示领域中所发生的事情。
重要的事件肯定会在系统其他地方引起反应,因此理解为什么会有这些反应同样也很重要。--- Martin Fowler
一个领域事件可以理解为是发生在一个特定领域中的事件,是你希望在同一个领域中其他部分知道并产生后续动作的事件。但是并不是所有发生过的事情都可以称为领域事件。一个领域事件必须对业务有价值,有助于形成完整的业务闭环,也即一个领域事件将导致进一步的业务操作。
领域事件可以是业务流程中的一个步骤。
如果在通用语言中存在“当a发生时,我们就需要做到b。”这样的描述,则表明a可以定义成一个领域事件。领域事件的命名一般也是“产生事件的对象名称 + 完成的动作的过去式”的形式。
例如:订单的发货事件 OrderDispathedEvent
领域事件的优点:
领域事件可以是一种基于事件的架构。事件架构的好处是可以把处理的业务解耦,实现系统的可扩展性,提高主业务流程的内聚性。
领域事件的特点:解决领域的聚合性问题、也是领域分析的工具。领域事件可以通过观察者模式和订阅模式进行实现。比较常见的实现就是事件总线。
事件风暴:
事件风暴也称为事件建模,类似头脑风暴,通过事件风暴的方法可以快速分析复杂业务领域,完成领域建模的目标。
事件风暴是一项团队活动,旨在通过领域事件识别出聚合根,今儿划分微服务的限界上下文。在活动中,团队先通过头脑风暴的形式罗列出领域中的所有的领域事件,整合之后形成最终的领域事件集合,然后对于每一个事件,标注出导致该事件的命令,然后再为每个事件标注出命令发起方的角色,命令可以是用户发起的,也可以是第三方系统调用或者是定时器触发等。最后对事件进行分类这里出聚合根以及限界上下文。
能够引发事件的事情包括用户行为、外部系统所发生的事情以及时间的流逝。事件也有助于找到领域的边界,对属于的不同阐述可能就意味着存在边界。
事件风暴中我们关注的东西:
事件 -> 某个动作的结果
属性 -> 事件的输入、输出
命令 -> 某个动作
实体 -> 命令的触发者
简单理解就是谁(实体)使用什么(输入)做了什么(命令、动作)产生了什么(输出)影响了什么(事件)。