CQS 命令-查询分离原则
摘自《UML和模式应用》
命令-查询分离原则(Command-Query Separation Principle).
CQS是针对方法的经典OO设计原则. 该原则指出, 任何方法都可能是如下情况之一:
1. 执行动作(更新,调整...)的命令方法, 这种方法通常具有改变对象状态等副作用, 并且是void的.
2. 向调用者返回数据的查询, 这种方法没有副作用, 不会永久性的改变任何对象的状态.
关键是, 一个方法不应该同时属于以上两种类型.
CQS被公认为计算机科学理论中具有价值的原则. 因为遵守该原则, 你能够更容易的推测出程序的状态, 在查询状态时不会同时发生变更. 这样使得设计更便于理解和预见.
例如, 如果一致遵循CQS, 那么你还知道查询或者getter方法不会作出任何更改, 而命令也不会有任何返回. 这是个简单的模式. 这通常是要严格遵循的, 因为如果突然采用其它方法, 将会产生令人不快的意外, 从而违反了OOD中的 最小意外(Least Surprise) 原则.
CQS 命令-查询分离原则相关推荐
- 讨论一下CQS (命令-查询 分离)原则
:D 看Craig Larman的书, 里面提到的这个原则. 请看下面两个函数: // style #1; used in the official solutionpublic void roll( ...
- 搬砖方法论:命令查询分离原则(Command-Query Separation,CQS原则)
其原则主张方法应给分为两类: 查询:方法返回结果,但不改变任何系统状态(无副作用). 命令:方法没有结果,但会改变系统状态. 此原则带来的优点如下 查询类型的方法,对于调用者来讲不用在顾虑各个查询方法 ...
- MASA Framework 命令查询职责分离
概念 CQRS (https://learn.microsoft.com/zh-cn/azure/architecture/patterns/cqrs)是一种与领域驱动设计和事件溯源相关的架构模式, ...
- DDD 中的CQRS(命令查询职责分离)架构模型有哪些?
更多内容关注微信公众号:fullstack888 命令/查询分离(CQS) 1988 年,Bertrand Meyer 在面向对象的软件设计一书中设计了 CQS 原则.简单来说,这个原则是说程序应当要 ...
- 浅谈命令查询职责分离(CQRS)模式
浅谈命令查询职责分离(CQRS)模式 在常用的三层架构中,通常都是通过数据访问层来修改或者查询数据,一般修改和查询使用的是相同的实体.在一些业务逻辑简单的系统中可能没有什么问题,但是随着系统逻辑变得复 ...
- 索引语法——创建索引 || 查看索引 || 删除索引 || ALTER命令 索引设计原则
索引语法 索引在创建表的时候,可以同时创建,也可以随时增加新的索引. 准备环境: 创建索引 查看索引 删除索引 ALTER命令 索引设计原则 索引的设计可以遵循一些已有的原则,创建索引的时候请尽量考虑 ...
- .NET Core开发实战(第34课:MediatR:轻松实现命令查询职责分离模式(CQRS))--学习笔记(下)...
34 | MediatR:轻松实现命令查询职责分离模式(CQRS) 实际上我们在定义我的查询的时候,也可以这样定义,例如我们定义一个 MyOrderQuery,把订单的所有名称都输出出去 namesp ...
- Docker命令查询
2019独角兽企业重金招聘Python工程师标准>>> Docker命令查询 基本语法 docker [OPTIONS] COMMAND [arg...] 一般来说,Docker 命 ...
- linux ftp登录命令_Linux使用pinky命令查询登录用户信息
请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习 1. 前言 本文主要讲解如何在Linux系统上使用pinky命令查 ...
最新文章
- Java ConcurrentHashMap Example and Iterator--转
- INFO org.apache.hadoop.ipc.RPC: Server at master/192.168.200.128:9000 not available yet, Zzzzz...
- c#中消息机制阻塞实例与结论
- java判断实例_java判断类和实例的关系
- 路由重分布列表控制例子
- Linux下程序开机启动
- sublime text c++ mac 怎么用_Mac 地址是什么,怎么用
- Python Scrapy 创建第一个爬虫项目
- Ruby静态分析工具检视:metric_fu, Simian, Saikuro以及其他
- VRay3.4 for SketchUp之次表面散射材质(3S材质)
- python将数据写入txt文本文件
- 鼠标不显示玩家服务器,远程链接服务器鼠标不显示
- python123随机密码生成器_python密码生成器的3种方法
- CBDB中国历代人物历史可视化系统
- 关于全国信息安全作品赛的了解
- 大学三年软件工程专业学习感受
- 列表解析式与生成器表达式
- 计算机如何新增硬盘,电脑新增加一块硬盘安装并使用的教程
- 数析三剑客 numpy pandas matplotlib 基础操作
- thinkphp项目_简历网站