- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
关于CQRS的文章我看了很多,有一点还是没看懂。到处都写着有两种模型(它们甚至可能有两种不同类型的数据存储)。其中一种模型称为write
模型,另一种称为read
。
流程如下:例如,编写模型进行一些更改,将这些更改存储到(自己的)数据库中,然后触发一个事件。然后 读取
模型,它必须订阅此类事件,处理它并更新自己的投影这是正确的吗?如果是,那么这基本上意味着人们称之为 read
模型的东西不仅仅是从存储中读取。
我错过了什么?主要问题是什么部分负责更新预测/查询部分?
附言谢谢大家的回复!现在拼图组装好了:-)
最佳答案
我的理解方式...
写入/命令端是域模型,负责确保系统处于正确状态 - 如果使用 DDD,则通过聚合。您加载聚合并应用一些行为。这是您的业务规则和行为所在的点。这也是您将引发领域事件的地方。这是一个很好的方法(尤其是结合事件源,其中您的数据库就是您的事件)。但是,我不认为 CQRS 要求使用事件。例如,您可以只更新 sql 数据库中的某些状态。命令端用于保护域的不变量,
Then read model, which has to be subscribed on such event, handle it and update own projection is this correct?
如果您正在使用事件,是的。而且,请参阅下文...
If yes then it means basically that something what people call read model is not reading only from the storage.
这取决于您的存储以及您“创建”读取模型的方式。您可以订阅事件,然后更新某些数据库(可以是 SQL 数据库中的表、文档数据库中的文档)或内存中对象模型中的读取模型。然后,您可以通过从数据库或内存模型中加载它们来查询这些读取模型。
但是,您也可以在没有事件的情况下使用 CQRS。在这种情况下,读取模型的概念可能只是一个数据库查询。即 SQL 查询。从与您的写入端相同的存储中读取。
例如,一个 API 或网页请求进来,你对你的数据库执行查询,然后将结果返回给用户。此查询不通过域模型。您仍然将读取与写入分开,只是没有使用事件。
The main question is what the part is responsible for updating projections/query part?
如果您正在使用事件,它将是事件的订阅者。您将收听事件,然后更新您的阅读模型。这些的实际实现将取决于您的体系结构。例如,如果使用 EventStore客户内置了对 subscribers 概念的支持.例如,这些可以在简单的控制台应用程序中或在 API 中实现。
这个流程可能是这样的:
如果您不使用事件,那就不同了。您的架构可能足够简单,读取端只查询数据库(从命令端已经是最新的!)。
关于architecture - 更新 CQRS 中的查询部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38543431/
如果您设计分布式应用程序以实现轻松扩展,或者您只想使用 Amazon、Google 或 Microsoft 提供的任何新的“云计算”产品,那么您通常最终会使用一些典型的概念或组件: 分布式 blob
根据uncle Bob's Clean Architecture 、企业和应用程序业务规则(概念上由命令组成)位于外部接口(interface)层之下的层中。因此,无论何时调用接口(interface
我在网上找不到它的任何实现实际上为您提供了一种与框架无关且实用的实现方式。 我已经看到了几个解决它的低于标准的建议: 使存储库方法成为原子 使用例原子化 它们都不是理想的。 案例#1 :大多数用例依赖
我正在查看 Sparkle 项目的配置并注意到它们设置: 架构 = ppc i386 x86_64 有效架构 = i386 x86_64 来自苹果的有效架构描述: Space-separated li
只听本周的podcast并认为将您的一些经验组合在一起会很好,在这些经验中,您已经看到设计的“架构”方面比应有的支配更多东西。 Java 在这方面经常受到负面报道,而且随着 Java EE 的复杂性增
我正在阅读 Bob Martin (https://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html) 的清洁架构
OSGi是模块化架构,JavaBeans是组件架构。有什么区别? 最佳答案 OSGi 和 Java Beans 之间的主要区别在于类加载器的工作方式。在标准 .jar 文件或 EJB 中,rt.jar
我对 Clean Architecture 中的 Gateway to Entity 依赖有疑问。我认为以下同心圆图形经常被介绍为整洁的架构。 在上图中,Gateway并没有直视Entity。但是,还
我试图理解 TOGAF 9 的核心概念。 无论我多长时间阅读 TOGAF 手册中的解释,我都无法理解 Enterprise Continuum 和 Architecture Repository 之间
如果 Kappa 架构直接对流进行分析,而不是将数据拆分为两个流,那么在像 Kafka 这样的消息系统中,数据存储在哪里?或者它可以在数据库中进行重新计算? 单独的批处理层是否比使用流处理引擎重新计算
它们的含义是什么,我可以将它们设置为不同的值吗? 最佳答案 架构是您想要构建的架构,有效的架构是您可以设想使用您的代码库构建的架构。 所以也许您只想为 armv7 构建二进制文件,但相同的源代码可以为
我现在正在尝试在 Xcode 4.0 中构建的项目遇到问题,希望有人可以为我解释一下。 我正在尝试使用 ZBar SDK 并遵循此处概述的指南中概述的说明: http://zbar.sourcefor
在基于 Apple Silicon 的机器上使用 Interface builder 时,我当前的项目会引发 IBDesignable 错误。 我尝试排除用于调试的 arm64 架构,以及我在互联网上
Xcode 项目中出现警告: crypto was rejected as an implicit dependency for 'libcrypto.a' because its architect
我正在 Xcode 5 中开始新项目。我想使用 iOS SDK 7 开发应用程序,但部署目标为 iOS 5.0。当我在 Xcode 中创建新项目并尝试将部署目标更改为 5.0 时,我收到了这条消息:
编辑 :这个问题可能是旧的,它与 xcode 3 有关。 我正在开发一个需要 voip 支持的 iPhone 应用程序,所以我添加了 pjsip 的 ARM 版本图书馆。但如果我使用 iPhone 模
我们最近将最低 iOS 支持设置为 4.0,并开始使用 LLVM 编译器对当前可用的应用程序进行新更新。 将“架构”和“有效架构”设置为仅 armv7 是否会排除 iPhone 3G 等 armv6
我想在我的 64 位机器上启用额外的架构(32 位)。我做了 dpkg --print-architecture 来了解已知的架构,即 amd64 。之后我做了 dpkg --print--forei
操作系统:OS X Yosemite 版本 10.10.1 XCode:未安装 应用程序加载器3.0 (620) PhoneGap:3.7.0 PhoneGap 构建:在线 (build.phoneg
我们已经构建了一个具有多个 native 绑定(bind)的 Xamarin 应用程序(iOS、Android)。该应用程序在设备和模拟器上运行良好,我们能够毫无问题地构建存档(显然)。 问题是当我们
我是一名优秀的程序员,十分优秀!