CQRS的一种变体BQRS

CQS(命令和查询分离)由Martin Fowler提出,他认为:“一个方法要么作为一个“命令”执行一个操作,要么作为一次“查询”向调用方返回数据,但两者不能共存”。这里的“命令”可以理解为更新软件状态的写操作,Martin Fowler将此称为“Modifier”;而“查询”即为读操作,是无副作用的。这种分离的好处在于使程序变得更容易推理与维护,由于查询操作不会更新软件状态,在编码时我们将更加有信心。

后来,Greg Young在此基础上提出了CQRS(Command Query Resposibility Segregation,命令查询职责分离),将CQS的概念从方法层面提升到了模型层面,即“命令”和“查询”分别使用不同的对象模型来表示。采用CQRS的驱动力除了从CQS那里继承来的好处之外,还旨在解决软件中日益复杂的查询问题,比如有时我们希望从不同的维度查询数据,或者需要将各种数据进行组合后返回给调用方。上述文字已经说明了两者之间的关系,下边这个图进一步说明了这两者之间的关系:

另外一个图可以更直观的展示这两者的区别

BQRS为Business Query Resposibility Segregation,业务查询职责分离,这里不再只是写操作,而是少量的业务操作,包括了读和写,单个业务的读和写可以采用CQS的方式,也可以采用其他方式。而对于大量的查询操作通过事件同步到另外一个数据中去,这样各个业务可以按照自己的需求去修改业务,对外暴露的数据通过别的服务暴露,这样不管是查询还是业务都可以灵活的扩展,具体如下图


参考:
https://insights.thoughtworks.cn/backend-development-cqrs/
https://www.jdon.com/cqrs.html
https://www.baeldung.com/cqrs-event-sourcing-java

おすすめ

転載: blog.csdn.net/maoyeqiu/article/details/113618009
おすすめ