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

本文转载自【何以解耦】:codedecoupled.com/php-es-projector...

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

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

实战用例

查询模型

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

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

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

支持业务实现

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

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

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

总结

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

本文转载自【何以解耦】:codedecoupled.com/php-es-projector... ,如果你也对 TDD,DDD 以及简洁代码感兴趣,欢迎关注公众号【何以解耦】,一起探索软件开发之道。

本作品采用《CC 协议》,转载必须注明作者和本文链接
Know how, know why meanwhile.
xuding
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!