zhaoyu@home:~$

微服务设计模式-事件源开发业务逻辑

事件源

event sourcing:是一种用于实现业务逻辑和持久化聚合的以事件为中心的技术。它将一个聚合存储为表示状态变化的一系列领域事件。一个 聚合的业务逻辑是围绕事件的生产和消费构建的。 事件源有诸多好处:1,保存了聚合的历史,方便审计和监管。2,保证了可靠的事件发布,对微服务十分适合。 事件源也有缺点:1,有学习成本,让编写业务逻辑变得复杂。2,查询事件存储比较困难,需要使用CQRS模式。

传统持久化方式的问题

传统持久化方式将领域对象持久化为表,属性对应为字段。如JPA或者更底层的Mybatis。也是大多数企业使用的方式。 这种方式有如下缺点:

  1. 对象编程-关系数据库模式不匹配(Object-Relational impedance mismatch)。
  2. 缺少聚合的历史,聚合的历史状态无法体现。
  3. 日志审计单调且容易出错。
  4. 事件发布和业务逻辑绑定。

事件源概述

事件源的存储

事件源将聚合存储为一系列事件,如下所示。

当应用创建或者更新一个聚合时,会像event表冲插入聚合。应用加载聚合时,从event表中取出事件,并 重新执行事件。加载一个聚合分为下面三步:

  1. 从聚合中加载事件。
  2. 使用默认构造方法创建一个聚合实例。
  3. 遍历事件,调用apply()方法。

代码如下:

Class aggregateClass = ...;
Aggregate aggregate = aggregateClass.newInstance();
for (Event event : events) {
    aggregate = aggregate.applyEvent(event);
}
// use aggregate...