PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了php-将DDD与事件源混合在一起大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我无法理解将DDD与ES混合在一起的概念.我认为事件是域方面的一部分.鉴于将它们从存储库发布到外部世界并保持模型的纯净和简单没有问题.但是除此之外,还必须有可能以特定的聚合重放它们.这是我的问题发生的地方.我想让我的领域模型保持纯净而简单,而这些对象仍然与lib / framework无关.

要将过去的事件应用于聚合,聚合必须知道是ES结构的一部分(因此它将不保留为纯域对象).由于聚合的主要工作是封装一些可能随时间演变的商务不变量,因此无法使用聚合API来应用旧事件.例如,存在带有子实体评论的汇总帖子.今天,Post允许添加10条注释,并且方法addCommnet()可以保护该规则.但这并非一直如此.一年前,用户最多可以添加20条评论.因此,处理过去的事件可能不符合当前的规则.

百老汇(流行的PHP CQRS库)通过应用事件而无需任何预验证来解决此问题.方法addCommnet()仅根据我们的不变式对其进行检查,然后处理应用事件. Applyinig事件本身不会做任何进一步的检查.那真是太棒了,但我认为这是我领域模型中的高度集成.我的域模型真的需要了解有关基础架构的任何知识吗(这是ES的数据保存风格)?

编辑:
用最简单的词来说明问题:是否有机会摆脱聚合中的所有applyXXX()方法

编辑2:
我已经用PHP编写了这个想法的PoC(有点可笑)-github

解决方法:

免责声明:我是CQRS framework人.

这是每一个CQRS总结的工作方式,事件不检查,因为他们表达的是已经发生在过去的事实.这意味着应用事件永远不会引发异常.

不,不是.它必须知道其过去的事件.那很好.

是什么使您无法忽略该事件或与一年前情况有所不同
这种特殊情况应使您虑CQRS的功能:写入逻辑与读取逻辑不同.您可以将事件应用到聚合上,以验证到达它的将来的命令(写/命令端).显示这20个事件是由其他逻辑(读取/查询端)处理的.

CQRS可以使您的聚合保持纯净(无副作用),不依赖任何库且简单.我该使用cqrs.nu所呈现的风格,通过产生的事件做.这意味着聚合命令处理程序方法实际上是generators.

读取模型也可以是非常简单的纯PHP不可变对象.仅读取模型更新程序具有持久性依赖关系,但可以使用接口将其反转.

大佬总结

以上是大佬教程为你收集整理的php-将DDD与事件源混合在一起全部内容,希望文章能够帮你解决php-将DDD与事件源混合在一起所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: