摘自《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. 《微信跳一跳》安卓手机刷分软件搭建及攻略
  2. 维沃手机有没有智能机器人_抢!抢!抢!到宏达手机广场抢价值399元智能学习机器人仅需39.9就可领取啦!...
  3. error: '__gnu_cxx::_Lock_policy' has not been declared
  4. 百度html在线编辑器插件,百度编辑器UEditor插件DjangoUeditor v1.8.143
  5. 标准 C++ I/O
  6. spark从hbase读数据到存入hbase数据两种版本写法
  7. 软件生存周期文档系列 之 6.用户操作手册
  8. 判断二叉树是否对称的代码
  9. node文件服务器,nodejs一个简单的文件服务器的创建方法
  10. Python小游戏--贪吃蛇
  11. 大数据技术笔记之数据采集和预处理
  12. 你是否了解新媒体,新媒体简介
  13. 数字图像处理-冈萨雷斯(学习笔记)
  14. [入门] 探索FireMonkey的StyleBook皮肤控件的使用(附示例程序)
  15. PhotoShop 橡皮擦工具组、渐变工具
  16. 初中数学计算机图片,初中数学课件背景图片大全.doc
  17. 赶不上春天,无法同其它植物竞相开放
  18. 小程序源码:图片秒加水印制作生成
  19. 广东省2021年夏季新冠疫情期间中医治未病指引
  20. java log4j详解_log4j详解

热门文章

  1. 福禄克Fluke 1535/ Fluke 1537 2500V绝缘电阻测试仪(数字高压兆欧表)F1535 F1537
  2. 【开发工具 - 安装手册】BeyondCompare4 下载与安装 + 永久免费使用
  3. Python视觉深度学习系列教程 第二卷 第4章 微调网络
  4. python怎么用于人工智能_python如何用于人工智能
  5. jz2440 ----移植自制的USB RTL8188EUS网卡驱动
  6. Spring二级缓存
  7. 与Boss成为朋友?《传说之下》突破传统RPG游戏的限制,放飞规则
  8. 用VC++开发数据库应用程序(二)
  9. java设计模式 连续处理_Java 设计模式(12) —— 状态模式
  10. PL2586设计电路|PL2586替代FE1.1S电路图|USB2.0HUB工业级集线器方案设计