问题标签 [cqrs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cqrs - J Oliver EventStore V2.0 CommonDomain 快照
什么是使用 EventStore 和 CommonDomain 时拍摄聚合快照的最佳实践(有没有更好的地方问,用户组,类似的东西)?
c# - 事件采购资源
寻找有关事件溯源主题的有用讨论组、文章、成功案例、参考应用程序和工具 (.Net) 的一些建议。
我已经熟悉:
福勒的文章:http ://martinfowler.com/eaaDev/EventSourcing.html
Greg Young 的文章(在评论中有下载的文档):http ://codebetter.com/gregyoung/2010/02/20/why-use-event-sourcing/
Greg Young 关于 DDDD 的优秀(草稿)文章:http: //abdullin.com/storage/uploads/2010/04/2010-04-16_DDDD_Drafts_by_Greg_Young.pdf
还有什么我应该阅读和看的吗?
azure - NCQRS 和 Lokad.CQRS 之间的差异
我目前正在研究用于将在Azure中托管的项目的CQRS框架。
我已阅读有关Ncqrs和 Lokad.CQRS 的信息,目前有点困惑。
它们是否都与 Azure 一起工作,都能够使用 NServiceBus 还是 Lokad 使用自己的消息传递?
我将使用的客户端是 Web 和移动客户端。我想制作一个 WCF 服务来获取命令,但不确定它是否会是 WCF。
有什么建议吗?
c# - C# 域模型 + 存储库:将加载实体的代码放在哪里
我有一个模型类,它是从我的存储库类中的“GetById”方法加载的。我现在需要向这个实体添加额外的属性,这些属性没有保存在数据库中,而是由服务类计算得出的。就像是:
所以为了加载/饱和一个 MyEntity 对象,我需要从数据库加载,然后调用生成器来确定“woo 因子”(咳咳)。从架构的角度来看,这段代码应该去哪里?目前的想法:
1)在存储库中:如果我在这里添加它,我觉得我将太多的责任交给了 repo。
2) 在“MyEntity”类中。在此处添加代码,可能会在访问 WooFactor 时延迟加载它。这会给 MyEntity 添加很多依赖项。
3)一个单独的服务类 - 似乎矫枉过正且不必要。
cqrs - JOliver EventStore - 如何访问所有存储的事件?
如何访问EventStore 中存储的所有事件以重建我的读取模型?
问题J Oliver EventStore V2.0 questionsGetFrom
中提到了一个调用的方法,但我在 Wireup 返回的接口“IStoreEvents”上找不到此方法。
domain-driven-design - 用于具有多个数据库的复合 .NET 应用程序的 DDD/CQRS
我承认我仍然是 DDD 的新手,对于 CQRS 更是如此。我也意识到 DDD 和/或 CQRS 可能不是解决所有问题的正确方法。尽管如此,我喜欢校长,但在当前项目的背景下有一些问题。
解决方案是基于当前配置生成性能数据的模拟器。管理员可以创建和修改模拟规范。测试人员设置一些环境条件并运行模拟器。结果被捕获、汇总和报告。
该解决方案由 3 个组件区域组成,每个区域都有自己的用例、领域逻辑和支持数据结构。因此,模块化设计作为一种分离逻辑和分离关注点的方式似乎很有吸引力。
- 第一个领域是允许用户创建和修改规范的管理方面。这将是一个 CRUD 重的“模块”。
- 第二个领域将用于执行模拟。域模型将类似于第一个区域,但针对执行仿真进行了优化,而不是提供方便的模型进行编辑。
- 第三个领域是报告。
我的第一直觉是按照这些思路创建三个模块(程序集)来封装每个区域的领域层。我还应该有三个独立的数据库吗?也许超过三个来支持写入与读取?
我认为这可能是 CQRS 的首选,但不知道如何去做。在我看来,CQRS 建议使用一组移动数据的后端进程。但如果是这种情况,并且数据持久性是跨领域的(正如 DDD 所建议的那样),那么我的数据访问代码不需要了解所有域对象吗?如果是这样,那么拥有单独的模块是否有好处?
最后,我之前没有提到的一点是,规范在发布之前被认为是“草稿”,这使得随后可以用于模拟。我的 PublishingService 需要了解第一个和第二个领域的域模型,以便在它响应 SpecificationPublishedEvent 时,它可以读取规范、翻译模型并将其持久化以供执行。这让我觉得我毕竟没有三个边界上下文。还是我在分析中遗漏了什么?
unit-of-work - CQRS 命令中的工作单元
CQRS中的“工作单元”大家是怎么解决的?我想要一个更新“标题”和“描述”的命令,而不是“链接”..
someclass { 字符串标题;字符串描述;字符串 [] 链接;}
c# - 使用 RavenDB 持久性插件连接 JOliver 的 EventStore
我正在评估JOliver 的 EventStore库。特别是,我正在尝试使用RavenDB作为 EventStore 的持久化引擎。EventStore 附带了一个插件。注意:数据库是空的,没有索引(默认索引除外)。
在连接商店时,我使用了以下内容:
但是,当我运行我的程序时,我得到一个异常,表明找不到“RavenCommitByRevisionRange”索引。
在挖掘 EventStore 代码时,我认为问题恰好是 RavenPersistenceEngine 没有被初始化。初始化代码在 RavenDB 服务器中安装所需的索引。
在 SQL Server 方面,我注意到示例项目中的接线代码显示了对名为“InitializeStorageEngine”的扩展方法的调用。此扩展方法与“PersistenceWireup”类相关联。但是,我用来连接 RavenDB 持久性的扩展方法返回类“Wireup”。所以我将部分连线代码包装在一个新的 PersistenceWireup 实例中,并且能够像这样调用“.InitializeStorageEngine()”:
这很好用!RavenDB 数据库现在包含必要的索引。
所以...我的问题:“.UsingRavenPersistence(...)”不应该返回“PersistenceWireup”的实例,而不仅仅是“Wireup”吗?或者有没有更好的方法在 EventStore 中连接 RavenDB 持久性?
c# - CQRS 验证和唯一性
在我的 CQRS 架构中,我想验证当我发送一个 InsertSettingCommand(设置是一个键/值对象)时,我想检查我的数据库中是否不存在该键。如果我很好地理解 CQRS 和验证,它表示只有在验证某些格式化内容(例如检查电子邮件是否遵守某些语法或客户姓名不为空)时才应在客户端执行验证。但就我而言,我需要查询我的数据库以查看它是否存在,但我不知道在客户端查询我的读取存储是否正确?或者我应该在我的域端调用我的读取存储?然后抛出一个 InsertSettingDuplicated 事件?
那么在我的 CQRS 环境中,最好的方法是什么?有人说补偿措施?它可以帮助我吗?
谢谢。
messaging - 在使用事件溯源的分布式系统中将事件存储在哪里?
假设您有多个由事件集成的系统,并且它们都使用事件溯源。你在哪里存储事件?
就我而言,我有三个系统:
- 一个网站,一个商店
- 网站的后端,用于管理客户、产品等。
- 会计系统
每当在这些系统之一中发生域事件时,该事件就会被发布并且可以由其他系统处理。所有系统都使用事件溯源。
我想知道您将在哪里保存事件。当然,每个系统都必须存储它处理的所有事件,因为它使用事件源,因此依赖于它曾经处理过的事件。
但是对于其他不需要且因此系统没有订阅的事件呢?我正在努力解决需求可能会发生变化的事实,这样系统就必须处理过去没有持续存在的事件。如果系统需要处理发生时未订阅的事件,您将从哪里获得这些事件?
我认为此时不使用事件溯源的系统有很大的不同。如果您必须在系统 A 中实现依赖于数据的功能,该功能在 A 中不可用,但在另一个系统 B 中,并且您通过像 NHibernate 这样的 ORM 工具保持当前状态,您可以简单地将数据从 A 导入到 B . 由于使用事件溯源的系统依赖于事件来达到其当前状态,因此您必须导入过去错过但现在需要的所有事件。
对我来说,这个问题有几种不同的方法。
- 每个系统都保存所有发布的事件。这使您能够在需要时重新发布事件或将它们导入另一个系统。
- 每个系统都会保存所有发生的事件,即使是那些(还)不需要处理的事件。
- 来自所有系统的所有事件都存储在中央事件日志中。如果您需要处理过去发生但您没有订阅的事件,您可以从这里导入它。
你如何处理这样的情况?你在哪里保存你的事件?
编辑
感谢 Roy Dictus 的回答。我仍然不确定如何处理以下情况:
该网站发布事件 CustomerRegistered、CustomerPurchasedProduct 和 CustomerMarkedProductAsFavorite。在后端的当前版本中,必须显示客户并且必须显示他们的购买。客户标记为收藏的内容对该版本的系统不感兴趣。因此后端只订阅了 CustomerRegistered 和 CustomerPurchasedProduct。
现在营销部门还希望在客户详细信息页面上显示有关最喜欢的产品的信息。由于后端未订阅 CustomerMarkedProductAsFavorite,因此此信息在后端不可用。我从哪里得到这些信息?