何以解耦

事件消费者之 Projector - 事件溯源

introduction to DDD
Image Credit: Unsplash

在事件溯源架构中,通过事件流获取应用的当前状态可能造成性能问题,Projector(放映机)通过监听事件,生成独立的视图保存应用的当前状态。我们可以将其想象成数据库中的物化视图,或者是一种缓存。

以下是从我们的实战经验中总结出的几种 Projector 用例。

实战用例

查询模型

用户对页面的反应速度要求较高,我们可以使用 Projector 生成服务于用户的查询模型。

值得一提的是 Projector 可使用与事件流不同的数据持久化方式,比如事件流原本储存在 MySQL, Projector 可使用 ElastiSearch 持久化查询模型:

让我们看一个简单的案例,使用 Projector 生成订单查询模型:

支持业务实现

当其他客户需要及时获取应用的当前状态,但是无法通过简单的事件传送时,我们可以使用 Projector 生成类似于缓冲的 Repository。 此 Repository 将为实现业务逻辑提供及时的应用状态。

让我们看一个简单的案例,使用 Projector 生成车辆可预定 Repository:

值得注意的是,这种用例倾向于同步处理方案,因为其时效性一般比较大。

总结

Projector 是一个简单且强大的模式,Projector 的职责单一且专注,易于编写单元测试。