potfur / journal
dev-master
2016-03-26 16:39 UTC
Requires
- php: >=5.6
Requires (Dev)
- league/tactician: ^1.0
- phpspec/phpspec: ^2.4
- phpunit/phpunit: ^5.2
- symfony/event-dispatcher: ^3.0
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, - 每当事件被存储,事件发射器将其发送到所有展示者,以便它们可以做出反应,
- 展示者
AccountHistoryPresenter和AccountBalancePresenter订阅事件并更新读取模型的数据,例如,作为对MoneyWereDepositedEvent的反应,AccountHistoryPresenter将添加一条新记录,说明何时以及存入了多少金额。AccountBalancePresenter将增加账户余额。
示例使用Tactician作为命令总线,以及事件分发器来发射事件,但它们可以被任何其他东西替换。
缺少的功能
- 快照
- 更详细的示例
许可证
请参阅LICENSE。