potfur / journal

dev-master 2016-03-26 16:39 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:58:41 UTC


README

深受EventCentric.Core事件源框架的启发。

它是如何工作的

示例是一个简化的银行账户案例,具有两个基本操作:存款取款,以增加和减少余额。

还有一个复合过程 - 转账,以展示如何实现sagas/process managers。

  • Account是一个聚合根,是一个接受命令操作的动作类,
  • 每个对Account产生影响的动作将至少创建一个DomainEvent实例,描述发生了什么,例如MoneyWereDepositedEvent表示在Account上存入了某些金额
  • Account按发生顺序存储这些事件,
  • UnitOfWork跟踪Account中的事件,当它提交时 - 所有新事件将发送到EventStore
  • EventStore将新事件存储为EventStream - 这个账户更改的不可变列表。
  • 当发生新动作时,UnitOfWork将根据存储的事件重新构建Account
  • 每当事件被存储,事件发射器将其发送到所有展示者,以便它们可以做出反应,
  • 展示者AccountHistoryPresenterAccountBalancePresenter订阅事件并更新读取模型的数据,例如,作为对MoneyWereDepositedEvent的反应,AccountHistoryPresenter将添加一条新记录,说明何时以及存入了多少金额。AccountBalancePresenter将增加账户余额。

示例使用Tactician作为命令总线,以及事件分发器来发射事件,但它们可以被任何其他东西替换。

缺少的功能

  • 快照
  • 更详细的示例

许可证

请参阅LICENSE