区块链研究实验室-解析以区块链为持久层的CQRS模型作用(下)
CQRS简述
命令查询的责任分离Command Query Responsibility Segregation (简称CQRS)模式是一种架构体系模式,能够使改变模型的状态的命令和模型状态的查询实现分离。
因此,我们将使用命令模型来更新状态,使用查询模型来获取状态。
CQRS通常与 Event-Sourcing一起使用,但不一定要一起使用。 Event-Sourcing确保在事件对象中捕获状态的每个更改并保持不变。
Event-Sourcing有一些我们想要应用于区块链的预期好处。
-
完全重建:我们可以重建应用程序状态,从空应用程序的事件日志中重新运行事件。
-
时间查询:我们可以确定特定时间应用程序的状态。
-
事件回放:如果某些事件出现错误,我们可以计算得出后果并给以修复。
对于以上的应用,利用区块链技术是非常难实现的;
什么是事件日志?这是一个保存所有事件的数据库。
命令和事件不包含逻辑,只包含数据。它们是数据传输对象(DTO)。
命令显示更改状态的意图。事件分享发生的事件,这是一个巨大的差异。命令可能会失败,同时事件会反映系统中已经发生的事情。
为什么将CQRS模型与区块链一起使用是有意义的?
我们需要代表一个应该随着时间的推移改变其状态并且仍然使用区块链的商业事物。
CQRS模型帮助我们定义一组命令,我们将存储在区块链上,并使用公共API发布我们的查询模型。
在链上存储命令有助于我们重新创建状态并审核第三方提供的状态缓存,以确定它是有效还是无效。
共享命令有助于我们快速让其他人了解如何通过可信网络与我们的域模型进行交互,而无需共享我们的域模型内部逻辑。
作为一个团队,我们可以选择我们想要的共享信息级别。
案例 - 共享命令:
人们将需要
a)依靠我们的API来阅读;
b)模拟我们的模型逻辑以防出现问题并证明我们在作弊;
案例 - 共享命令和模型逻辑:
人们将
a)依靠我们的API来阅读;
b)创建一个应用程序来执行我们的模型逻辑而不依赖于我们的API;
案例 - 共享所有应用程序:
人们将
a)依赖我们的API来阅读 ;
b)在他们的终端启动所有应用程序而不使用我们;
共享模型逻辑和一切都有一个灰色限制。
在我们的例子中,我们选择共享命令和模型逻辑。我们希望其他人能够自己执行此操作,并依赖于我们的某些特定逻辑,如复杂的查询模型。
使用CQRS模型,我们能够以不同的方式扩展命令模型和查询模型。我们希望系统快速响应复杂的查询,但我们不介意慢写,因为资产创建或管理不像读取数据那么频繁。
此外,这种方法允许我们选择只是共享命令。对于选择分享内容和不分享内容的公司而言,这一点非常重要。
想象中的公司差异化是如何管理信息,而不是控制资产创造。
具体实现代码请去查看:区块链研究实验室
本文转载公众号:区块链研究实验室