在 PHP 中实现 CQRS

Posted

技术标签:

【中文标题】在 PHP 中实现 CQRS【英文标题】:Implementing CQRS in PHP 【发布时间】:2018-05-14 06:29:06 【问题描述】:

我正在研究 CQRS 模式,我们的团队想在 php 中开发一个基于 CQRS 的系统。

我知道我们可以在 PHP 中模拟事件系统,但我发现如果编程语言是基于事件的,CQRS 实现更好/更容易(我不确定这一点)。

我有两个问题:

    我想知道如果我们在 PHP 中通过 CQRS 模式开发我们的系统是否可靠,或者切换到其他(基于事件的)编程语言会给我们更多的一致性?

    CQRS在微服务系统中有哪些好处?还有其他可靠且易于实现的模式吗?

【问题讨论】:

【参考方案1】:

您使用的语言对于 CQRS 来说并不那么重要。命令和查询是非常简单的对象,因此您可以根据需要使用 PHP。选择开发人员熟悉的内容。

在使用微服务时,CRQS 与事件溯源结合使用非常有用:微服务 A 处理命令并将事件存储在事件存储中,而微服务 B 处理事件、更新查询数据库并处理查询。这样您的服务可以独立扩展,并且您的业务逻辑更易于管理。

【讨论】:

【参考方案2】:

我不建议您使用 PHP 来构建 CQRS。您应该问自己的第一个问题是,“您需要实施像 CQRS 这样的事件溯源技术的原因是什么?”

如果答案是因为您需要一个允许您以更有效的方式分发所有系统的架构,那么您应该重新考虑使用 PHP。它在单线程处理器中运行,并且有很多限制。

在几个月的时间里,我们一直在研究一个基于 CQRS 的 PHP 项目,但最终,我们遇到了很多与性能相关的问题。最后,我们发现了 Elixir 的函数式编程,我们决定放弃一个机会。

在几个月的时间里,我阅读了很多关于 CQRS 的信息,并找到了 Martin Fowler,他是与微服务领域更相关的贡献者之一。甚至他也强烈建议使用函数式编程语言进行事件溯源。

但是,如果你已经决定使用 PHP 来构建 CQRS 项目,你可以给一个机会,自己测试一下。

相反,如果您对使用 Elixir 感兴趣,可以先阅读一些实际示例 https://leanpub.com/buildingconduit/read,这是一个使用 Elixir 和 CQRS + 命令库的基于博客的网站。

【讨论】:

1) 抱歉,CQRS 与事件溯源无关。它非常独立地使用。 2) PHP 非常适合 CQRS 实现。

以上是关于在 PHP 中实现 CQRS的主要内容,如果未能解决你的问题,请参考以下文章

以正确的方式实施 CQRS / ES

无法在 php 5.3 中实现 Facebook 登录

如何在 PHP 中实现分页? [关闭]

PHP:如何在一个表单操作中实现图片与文字一起传递

隐写术是如何在php中实现的

如何使用php在cordova应用程序中实现推送通知?