代码人生

命令查询的责任分离Command Query Responsibility Segregation (简称CQRS)

代码人生 http://www.she9.com 2018-11-20 21:14 出处:网络 编辑:@技术狂热粉
CQRS是什么?命令查询的责任分离CommandQueryResponsibilitySegregation(简称CQRS)模式是一种架构体系模式,能够使改变模型的状态的命令和模型状态的查询实现分离。这属于DDD应用领域的一个模式,主要解决DDD在数据库

CQRS是什么?

命令查询的责任分离Command Query Responsibility Segregation (简称CQRS)模式是一种架构体系模式,能够使改变模型的状态的命令和模型状态的查询实现分离。这属于DDD应用领域的一个模式,主要解决DDD在数据库报表输出上处理方式。

  Greg Young在infoQ的采访中“State Transitions in Domain-Driven Design”谈到了CQRS,Greg 解释了把领域模型分为两种:状态校验,以及状态转换,维持当前状态的一个视图。

命令查询的责任分离Command Query Responsibility Segregation (简称CQRS)

CQRS代表命令、查询、责任和隔离。在CQRS中,我们将读写操作分为两部分,一部分是命令端,另一部分是查询端。命令端处理创建、更新和删除。基本上,在客户端就将数据的新增修改删除等动作和查询进行分离,前者称为Command,走Command bus进入Domain对模型进行操作,而查询则从另外一条路径直接对数据进行操作,比如报表输出等。


我们什么时候使用CQRS?


当多个操作同时在同一数据上执行时。


在这种情况下,当读操作的数量大于写操作的数量时,我们需要水平缩放。在这种情况下,我们更喜欢CQRS。


一组开发人员可以关注写方面,另一组开发人员可以关注读方面和用户界面。


CQRS的好处


CQRS的主要和最有用的特性是我们可以独立地进行水平和垂直缩放。


使用CQRS很容易维护数据库的安全性。因为有些用户只有读取权限,另外有些用户只有写权限,而还有些用户两种权限都有。因此,在CQRS中很容易维护安全。


CQRS也帮助我们保持整个独立系统的一致性。


CQRS还有助于在出现故障时读取端可用的情况下,如果写端系统宕机,那么您仍然可以读取数据库中数据。


CQRS的挑战


当我们在应用程序中实现CQRS时。如果我们也使用事件源,它可能导致更复杂的应用程序设计。


在CQRS中,当我们分离数据库的读写端时,读数据可能会过时。


什么时候不建议使用CQRS


当域或业务规则很简单时。


一个简单的crud风格的用户界面和相关的数据访问操作就足够了。


当执行的读写操作数量较少且数据库不太大时。


当我们的数据库没有分布时。


请关注公众号:程序你好
0

精彩评论

暂无评论...
验证码 换一张
取 消