摘自《UML和模式应用》

命令-查询分离原则(Command-Query Separation Principle).

CQS是针对方法的经典OO设计原则. 该原则指出, 任何方法都可能是如下情况之一:

1. 执行动作(更新,调整...)的命令方法, 这种方法通常具有改变对象状态等副作用, 并且是void的.

2. 向调用者返回数据的查询, 这种方法没有副作用, 不会永久性的改变任何对象的状态.

关键是, 一个方法不应该同时属于以上两种类型.

CQS被公认为计算机科学理论中具有价值的原则. 因为遵守该原则, 你能够更容易的推测出程序的状态, 在查询状态时不会同时发生变更. 这样使得设计更便于理解和预见.

例如, 如果一致遵循CQS, 那么你还知道查询或者getter方法不会作出任何更改, 而命令也不会有任何返回. 这是个简单的模式. 这通常是要严格遵循的, 因为如果突然采用其它方法, 将会产生令人不快的意外, 从而违反了OOD中的 最小意外(Least Surprise) 原则.

CQS 命令-查询分离原则相关推荐

  1. 讨论一下CQS (命令-查询 分离)原则

    :D 看Craig Larman的书, 里面提到的这个原则. 请看下面两个函数: // style #1; used in the official solutionpublic void roll( ...

  2. 搬砖方法论:命令查询分离原则(Command-Query Separation,CQS原则)

    其原则主张方法应给分为两类: 查询:方法返回结果,但不改变任何系统状态(无副作用). 命令:方法没有结果,但会改变系统状态. 此原则带来的优点如下 查询类型的方法,对于调用者来讲不用在顾虑各个查询方法 ...

  3. MASA Framework 命令查询职责分离

    概念 CQRS (https://learn.microsoft.com/zh-cn/azure/architecture/patterns/cqrs)是一种与领域驱动设计和事件溯源相关的架构模式, ...

  4. DDD 中的CQRS(命令查询职责分离)架构模型有哪些?

    更多内容关注微信公众号:fullstack888 命令/查询分离(CQS) 1988 年,Bertrand Meyer 在面向对象的软件设计一书中设计了 CQS 原则.简单来说,这个原则是说程序应当要 ...

  5. 浅谈命令查询职责分离(CQRS)模式

    浅谈命令查询职责分离(CQRS)模式 在常用的三层架构中,通常都是通过数据访问层来修改或者查询数据,一般修改和查询使用的是相同的实体.在一些业务逻辑简单的系统中可能没有什么问题,但是随着系统逻辑变得复 ...

  6. 索引语法——创建索引 || 查看索引 || 删除索引 || ALTER命令 索引设计原则

    索引语法 索引在创建表的时候,可以同时创建,也可以随时增加新的索引. 准备环境: 创建索引 查看索引 删除索引 ALTER命令 索引设计原则 索引的设计可以遵循一些已有的原则,创建索引的时候请尽量考虑 ...

  7. .NET Core开发实战(第34课:MediatR:轻松实现命令查询职责分离模式(CQRS))--学习笔记(下)...

    34 | MediatR:轻松实现命令查询职责分离模式(CQRS) 实际上我们在定义我的查询的时候,也可以这样定义,例如我们定义一个 MyOrderQuery,把订单的所有名称都输出出去 namesp ...

  8. Docker命令查询

    2019独角兽企业重金招聘Python工程师标准>>> Docker命令查询 基本语法 docker [OPTIONS] COMMAND [arg...] 一般来说,Docker 命 ...

  9. linux ftp登录命令_Linux使用pinky命令查询登录用户信息

    请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习 1. 前言 本文主要讲解如何在Linux系统上使用pinky命令查 ...

最新文章

  1. Java ConcurrentHashMap Example and Iterator--转
  2. INFO org.apache.hadoop.ipc.RPC: Server at master/192.168.200.128:9000 not available yet, Zzzzz...
  3. c#中消息机制阻塞实例与结论
  4. java判断实例_java判断类和实例的关系
  5. 路由重分布列表控制例子
  6. Linux下程序开机启动
  7. sublime text c++ mac 怎么用_Mac 地址是什么,怎么用
  8. Python Scrapy 创建第一个爬虫项目
  9. Ruby静态分析工具检视:metric_fu, Simian, Saikuro以及其他
  10. VRay3.4 for SketchUp之次表面散射材质(3S材质)
  11. python将数据写入txt文本文件
  12. 鼠标不显示玩家服务器,远程链接服务器鼠标不显示
  13. python123随机密码生成器_python密码生成器的3种方法
  14. CBDB中国历代人物历史可视化系统
  15. 关于全国信息安全作品赛的了解
  16. 大学三年软件工程专业学习感受
  17. 列表解析式与生成器表达式
  18. 计算机如何新增硬盘,电脑新增加一块硬盘安装并使用的教程
  19. 数析三剑客 numpy pandas matplotlib 基础操作
  20. thinkphp项目_简历网站

热门文章

  1. 计算机毕设(附源码)JAVA-SSM基于web的医院门诊管理系统
  2. html中的main标签,html中div标签、section标签和acticle标签三者有啥区别,main和div
  3. LeetCode224 基本计算器
  4. html单选按钮默认选中VSreact单选按钮默认选中
  5. 【Web漏洞】SQL注入
  6. 【诗歌系列】《神曲》
  7. 积分兑换商城如何才能更有活力?
  8. Hanoi 塔问题(Java实现)
  9. Linux防火墙原理
  10. 退役军人信息化服务平台订花开发服务流程