Questions tagged «cqrs»

7
将Kafka用作(CQRS)事件存储。好主意?
虽然我已经遇到卡夫卡之前,我刚刚意识到卡夫卡也许可以作为(基础)一CQRS,eventstore。 Kafka支持的主要观点之一: 事件捕获/存储,当然都是HA。 Pub / sub架构 重播事件日志的能力,使新订户可以在事件发生后向系统注册。 诚然,我不是100%精通CQRS /事件源,但是这似乎与事件存储区应该的非常接近。有趣的是:关于Kafka用作事件存储,我实在找不到太多,所以也许我错过了一些东西。 那么,卡夫卡缺少什么东西可以使其成为一个好的活动库?能行吗?用它生产吗?对洞察力,链接等感兴趣 基本上,系统状态是根据系统曾经收到的事务/事件保存的,而不仅仅是保存系统的当前状态/快照(通常这样做)。(将其视为会计中的总帐:最终所有事务都加到最终状态)。这允许进行各种有趣的事情,但请仔细阅读提供的链接。

6
使用RDBMS作为事件源存储
如果我使用的是RDBMS(例如SQL Server)来存储事件源数据,那么架构会是什么样? 我已经看到一些抽象意义上的变体,但是没有具体的意义。 例如,假设某人拥有一个“产品”实体,那么对该产品的更改可以采用以下形式:价格,成本和说明。我对是否愿意感到困惑: 有一个“ ProductEvent”表,其中包含产品的所有字段,每个更改都意味着该表中有一条新记录,并在适当时加上“谁,什么,什么地方,为什么,何时和如何”(WWWWWH)。更改成本,价格或说明时,会添加一个全新的行来表示产品。 将产品成本,价格和说明存储在具有外键关系的连接到产品表的单独表中。更改这些属性后,请根据需要使用WWWWWH写入新行。 将WWWWWH以及代表事件的序列化对象存储在“ ProductEvent”表中,这意味着必须在应用程序代码中加载,反序列化和重播事件本身,以便为给定产品重新构建应用程序状态。 我特别担心上面的选项2。更极端的是,产品表几乎是每个属性一个表,要加载给定产品的应用程序状态将需要从每个产品事件表中加载该产品的所有事件。这种桌子爆炸对我来说是不对的。 我确定“取决于”,虽然没有一个“正确答案”,但我试图让人们了解什么是可以接受的,什么是完全不可接受的。我也知道NoSQL可以在这里提供帮助,因为事件可以针对聚合根存储,这意味着仅向数据库发出单个请求即可获取事件以从中重建对象,但是我们在数据库上并未使用NoSQL db。片刻,所以我在寻找替代品。

9
为什么命令和事件分别表示?
在强调事件的体系结构中,命令和事件之间有什么区别?我能看到的唯一区别是命令通常是由系统外部的参与者来发起/调用的,而事件似乎是由系统中的处理程序和其他代码来发起的。但是,在我看到的许多示例应用程序中,它们具有不同(但功能相似)的接口。

4
CQRS:命令返回值[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 改善这个问题 关于命令是否应该具有返回值,似乎存在无尽的困惑。我想知道是否只是因为参与者没有说明他们的背景或情况而引起的困惑。 混乱 这是混乱的例子... 乌迪·达汉(Udi Dahan)说,命令“没有将错误返回给客户端”,但在同一篇文章中,他展示了一个图,其中命令的确向客户端返回了错误。 Microsoft Press Store上的一篇文章指出“命令...不返回响应”,但随后给出了模糊的警告: 随着围绕CQRS的战场经验的增长,一些实践逐渐巩固并趋于成为最佳实践。在某种程度上与我们刚才所说的相反...今天普遍认为,命令处理程序和应用程序都需要知道事务操作的进行方式。结果必须是已知的... 吉米·博加德(Jimmy Bogard)说“命令总是有结果”,但随后又花了很多功夫来说明命令如何返回无效。 那么,命令处理程序是否返回值? 答案? 从吉米·博加德(Jimmy Bogard)的“ CQRS神话”中获取线索,我认为该问题的答案取决于您在说什么程序化/上下文“象限”: +-------------+-------------------------+-----------------+ | | Real-time, Synchronous | Queued, Async | +-------------+-------------------------+-----------------+ | Acceptance | Exception/return-value* | <see below> | | Fulfillment | return-value | n/a | +-------------+-------------------------+-----------------+ 验收(例如验证) 命令“接受”主要是指验证。假定验证结果必须同步地提供给调用方,而不管命令“完成”是同步的还是排队的。 但是,似乎许多从业者并不从命令处理程序中启动验证。从我所看到的,这是因为(1)他们已经找到了一种在应用程序层处理验证的绝佳方法(即,通过数据注释检查有效状态的ASP.NET MVC控制器)或(2)一种体系结构假设命令已提交到(进程外)总线或队列中。后一种异步形式通常不提供同步验证语义或接口。 …

8
CQRS事件来源:验证用户名的唯一性
让我们以一个简单的“帐户注册”示例为例,流程如下: 用户访问网站 点击“注册”按钮并填写表格,点击“保存”按钮 MVC控制器:通过读取ReadModel验证用户名的唯一性 RegisterCommand:再次验证用户名唯一性(这是问题) 当然,我们可以通过读取MVC控制器中的ReadModel来验证UserName的唯一性,以提高性能和用户体验。但是,我们仍然需要再次在RegisterCommand中验证唯一性,并且显然,我们不应该在Commands中访问ReadModel。 如果我们不使用事件源,则可以查询域模型,所以没有问题。但是,如果使用事件源,则无法查询域模型,那么如何在RegisterCommand中验证用户名的唯一性? 注意: User类具有Id属性,而UserName不是User类的键属性。使用事件源时,我们只能通过Id获取域对象。 顺便说一句:在要求中,如果已使用输入的用户名,则网站应向访问者显示错误消息“对不起,用户名XXX不可用”。向访问者显示一条消息,例如:“我们正在创建您的帐户,请稍候,我们将稍后通过电子邮件将注册结果发送给您”,这是不可接受的。 有任何想法吗?非常感谢! [更新] 一个更复杂的示例: 需求: 下订单时,系统应检查客户的订购历史记录,如果他是有价值的客户(如果客户在去年每月至少下达10个订单,那么他是有价值的),我们将为您减价10%。 实现方式: 我们创建PlaceOrderCommand,在命令中,我们需要查询订购历史记录以查看客户端是否有价值。但是,我们该怎么做呢?我们不应该在命令中访问ReadModel!正如Mikael所说,我们可以在帐户注册示例中使用补偿命令,但是如果在此订购示例中也使用补偿命令,它将太复杂,并且代码可能很难维护。

5
CQRS与CQS之间的区别
我正在学习什么是CQRS模式,并且知道还有CQS模式。 当我尝试搜索时,我发现了很多关于CQRS的图表和信息,但没有发现太多有关CQS的信息。 CQRS模式的关键点 在CQRS中,有一个完全独立的模型(命令模型)和一个模型(查询模型)编写。 CQS与CQRS有何不同?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.