CQRS 意味着命令和查询的责任是分离的。很多人错误的认为CQRS是一个整体架构,其实,CQRS这个一个小的模式,这个模式由Greg Young和Udi Dahan首次提出. 他们从Bertrand Meyer的《Object Oriented Software Construction》中获取的命令和查询分离模式的灵感。在CQS背后的主要观点是:"一个方法应该改变一个对象的状态,或者返回一个结果,但不是二者兼具。换句话说,问一个问题不应该改变问题的答案,更正式的,一个方法只有被引用透明(referentially transparent)并且没有任何副作用的时候才会有返回一个值。
正因如此,我们把方法划分为两种:
Commands - 改变一个对象或整个系统的状态
Queries - 在不改变对象的状态的情况下返回结果
在现实中,可以很简单讲清楚什么是什么。Queries会声明返回类型,commands没有返回值. 这种模式是普遍适用的,它会让对象更加简单。换句话讲,CQRS只适用于解决特定问题.
很多应用程序使用主流读和写来构建对象的方法。对于同一个模型(model)用读和写会造成model更加复杂,维护和优化都非常困难。
这两种模式的真正策略是你可以将修改状态和不修改状态的方法分离开,这种分离可能造成在处理性能和调优时变得困难,你可以在写的部分来优化系统中被分开用做读的部分,写的部分是已知的领域,这个领域包含所有的行为,读的部分被指定为报表提供服务。
这种模式在一个很大的应用程序的另外的一个好处是,你可以将开发人员分配到更小的团队中去完成这个系统的不同任务(只完成读或写),而不用关心其他的任务。例如,开发读部分的人员不需要明白领域模型。
查看原文: