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命令查 ...
最新文章
- 《微信跳一跳》安卓手机刷分软件搭建及攻略
- 维沃手机有没有智能机器人_抢!抢!抢!到宏达手机广场抢价值399元智能学习机器人仅需39.9就可领取啦!...
- error: '__gnu_cxx::_Lock_policy' has not been declared
- 百度html在线编辑器插件,百度编辑器UEditor插件DjangoUeditor v1.8.143
- 标准 C++ I/O
- spark从hbase读数据到存入hbase数据两种版本写法
- 软件生存周期文档系列 之 6.用户操作手册
- 判断二叉树是否对称的代码
- node文件服务器,nodejs一个简单的文件服务器的创建方法
- Python小游戏--贪吃蛇
- 大数据技术笔记之数据采集和预处理
- 你是否了解新媒体,新媒体简介
- 数字图像处理-冈萨雷斯(学习笔记)
- [入门] 探索FireMonkey的StyleBook皮肤控件的使用(附示例程序)
- PhotoShop 橡皮擦工具组、渐变工具
- 初中数学计算机图片,初中数学课件背景图片大全.doc
- 赶不上春天,无法同其它植物竞相开放
- 小程序源码:图片秒加水印制作生成
- 广东省2021年夏季新冠疫情期间中医治未病指引
- java log4j详解_log4j详解
热门文章
- 福禄克Fluke 1535/ Fluke 1537 2500V绝缘电阻测试仪(数字高压兆欧表)F1535 F1537
- 【开发工具 - 安装手册】BeyondCompare4 下载与安装 + 永久免费使用
- Python视觉深度学习系列教程 第二卷 第4章 微调网络
- python怎么用于人工智能_python如何用于人工智能
- jz2440 ----移植自制的USB RTL8188EUS网卡驱动
- Spring二级缓存
- 与Boss成为朋友?《传说之下》突破传统RPG游戏的限制,放飞规则
- 用VC++开发数据库应用程序(二)
- java设计模式 连续处理_Java 设计模式(12) —— 状态模式
- PL2586设计电路|PL2586替代FE1.1S电路图|USB2.0HUB工业级集线器方案设计