wwwision/dcb-example

Sara Pellegrini 描述的动态一致性边界模式(Dynamic Consistency Boundary pattern)的简单示例

1.2.3 2023-06-15 08:52 UTC

README

简单示例,展示由 Sara Pellegrini 描述的动态一致性边界模式 (点击查看详细)

此包的目的是探索这一想法,寻找潜在的问题,并传播相关信息。

总结 请查看 示例脚本Behat 测试 以了解具体操作。

背景

动态一致性边界(Dynamic Consistency Boundary,简称 DCB)允许在事件源系统中强制实施硬约束,而无需依赖于单个事件流。这有助于关注领域模型的行为,而不是其刚性结构。它还允许更简单的架构和潜在的性能改进,因为多个投影可以在同一事件上操作,而无需同步。

在上述博客文章中详细了解这一有趣的方法,或观看 Saras 在 YouTube 上的演讲(带有英语字幕)。此包使用 wwwision/dcb-eventstore 包和 wwwision/dcb-eventstore-doctrine 数据库适配器来模拟此演示的示例(略有差异)。

重要类/概念

考虑/发现

我一直觉得,将焦点放在事件流上是领域驱动设计的干扰。因此,当我遇到这个概念时,我感到非常高兴。到目前为止,我还没有机会在现实世界场景中测试它,但它对我来说非常有意义。在我看来,这个例子表明,这种方法在实践中确实行之有效(尽管当前实现中存在一些小问题)。

使用方法

通过 composer 安装

composer create-project wwwision/dcb-example-courses

现在您应该能够通过以下方式运行 示例脚本

php dcb-example-courses/index.php

您应该会得到...完全没有输出。这是因为示例脚本目前满足所有约束。尝试更改脚本以测试业务规则是否确实得到执行,例如,您可以在文件末尾添加以下行

$commandHandler->handle(new SubscribeStudentToCourse(CourseId::fromString('c1'), StudentId::fromString('s2')));

这将导致以下异常

Failed to subscribe student with id "s2" to course with id "c1" because a student with that id does not exist

或者,您可以查看 Behat 测试

测试

此包包含16个Behat场景,涵盖所有业务功能。您可以通过以下方式运行测试

composer test-behat

致谢

这些包的大部分实现都基于Sara Pellegrini所做的大量基础工作,所以所有的赞誉都归功于她!

贡献

我非常好奇对这个项目的反馈。请自由开始/加入 讨论问题Pull requests