我和我的团队一直在讨论使用CQRS(命令查询职责分离)设计模式,我们仍在尝试评估使用它的利弊。根据:http://martinfowler.com/bliki/CQRS.html
我们还没有看到足够多的CQRS在现场使用,因此无法确信我们理解其优缺点
那么你们认为,在什么情况下需要使用CQRS呢?
我和我的团队一直在讨论使用CQRS(命令查询职责分离)设计模式,我们仍在尝试评估使用它的利弊。根据:http://martinfowler.com/bliki/CQRS.html
我们还没有看到足够多的CQRS在现场使用,因此无法确信我们理解其优缺点
那么你们认为,在什么情况下需要使用CQRS呢?
CQRS不是一个包含整个应用程序的模式。
它是建立在领域驱动设计(DDD)基础上的概念。DDD的一个重要战略概念是所谓的有界上下文。
在典型的应用程序中,有多个有界上下文,可以根据实际情况实现。例如:
这可能并不能回答你的问题,但可以更深入地了解主题。老实说,我认为在考虑项目的具体情况之前,很少有像明确的最佳实践这样的东西可言。
有些人批评CQRS过于复杂,这可能是真的。
当然,在以CQRS风格开发简单的CRUD应用程序时,会增加额外的开发负担,因此我建议只在以下情况下考虑使用CQRS:
嗯,对于你的问题没有简单明了的答案,但我想给你一些实际应用CRQS的例子,这些例子可能会帮助你理解如何在你的应用中使用它。
1. Instagram
我们经常看到Instagram的故事和短视频等内容。这些故事是只读的,最好为此类数据创建一个独立的只读数据库。外部世界只能处理该特定数据库,以渲染朋友时间线中的故事,这样系统就不需要关心主要的业务密集型信息存储在何处。
2. Amazon
当下订单时,订单服务会发出一个事件,这个事件被其他服务订阅,其中一个服务可以更新反规范化的只读数据库,而其他服务(比如消息服务)可以从只读数据库中获取归一化信息,如userId,ordered等进行邮件处理以确认订单。
当以下情况发生时使用它:
https://learn.microsoft.com/en-us/azure/architecture/patterns/cqrs#when-to-use-this-pattern