某个函数既返回对象状态值,又修改对象状态

重构:建立两个不同的函数,其中一个负责查询,另一个负责修改

动机

如果某个函数只是向你提供一个值,没有任何看得到的副作用,那么这是个很有价值的东西。
你可以任意调用这个函数,也可以把invoke搬到函数的其他地方。

明确表现出“有副作用”与“无副作用”两种函数之间的差异,是个很好的想法。下面是一条好规则:任何有返回值的函数,都不应该有看得到的副作用

什么是“看得到的副作用”?有一种常见的优化方法:将查询所得结果缓存于某个字段中,这么后续的重复查询就可以大大加快速度。虽然这种做法改变了对象的状态,但这种修改是察觉不到的,因为不论如何查询,你总是获得相同结果。

并发问题
    如果在一个多线程系统中,一个惯用手法:在同一个动作中完成检查和赋值。这是否和Separate Query from Modifier 互相矛盾呢?两者并不矛盾,但你需要做一些额外工作。你需要保留第三个函数来同时做两件事。这个“查询-修改”函数将调用各自独立的查询函数和修改函数,并声明synchronized。

Separate Query from Modifier(分离查询和修改)相关推荐

  1. [JSP暑假实训] 四.MyEclipse+Servlet+JSP实现火车票网站查询、修改、删除操作

    本系列文章是作者暑假给学生进行实训分享的笔记,主要介绍MyEclipse环境下JSP网站开发,包括JAVA基础.网页布局.数据库基础.Servlet.前端后台数据库交互.DAO等知识. 前一篇文章讲解 ...

  2. 01.query的分类-条件查询和组合查询

    文章目录 1. es单个条件查询和组合查询 2.query和filter context 1. query context 2. filter context 3.使用样例 1. es单个条件查询和组 ...

  3. 树状数组的建树 单点修改 单点查询 区间修改 区间查询

    单点修改  单点查询   用普通数组就能写出来 单点修改  区间查询   用线段树  树状数组: 区间修改  区间查询   用线段树  树状数组: 区间修改  单点查询   用线段树  树状数组: 建 ...

  4. oracle删除查询的数据库语句,Oracle简略的语句 查询 删除 修改(1)

    Oracle简单的语句 查询 删除 修改(1) Dual系统表介绍 数据类型: 数据是信息数字表现形式,信息的加工处理是以大量的结构化数据为载体进行的,数据库管理系统的核心是数据库,数据库的主要对象是 ...

  5. 查询和修改mysql最大连接数的方法

    查询和修改mysql最大连接数的方法 切换到mysql库里查询 show variables like 'max_connections'; show global status like 'Max_ ...

  6. 量具管理-查询及修改功能

    量具管理-查询及修改功能 此模块可以查询过期和即将过期量具的清单,并能够修改校准日期和查看校准报告 建立文件queryclass.py # -*- coding: utf-8 -*- import o ...

  7. SpringBoot学习之旅(七)---JPA进阶篇之自定义查询、修改、分页

    文章目录 前言 源码下载 其他文章 查询关键字 自定义Select和Update 分页及自定义分页 自定义分页 分页查询的业务代码 前言 前一节SpringBoot学习之旅(六)-JPA操作MySql ...

  8. 【Git】Git 基础命令 ( 添加暂存文件 git add | 提交文件至版本库 git commit | 查看版本库状态 git status | 查询文件修改 git diff )

    文章目录 一.添加暂存文件 git add 二.提交文件至版本库 git commit 三.查看版本库状态 git status 四.查询文件修改 git diff 一.添加暂存文件 git add ...

  9. SELinux系列(十三)—默认安全上下文的查询和修改(semanage命令)

    前面讲到,restorecon 命令可以将文件或目录恢复成默认的安全上下文, 这就说明每个文件和目录都有自己的默认安全上下文, 事实也是如此,为了管理的便捷, 系统给所有的系统默认文件和目录都定义了默 ...

最新文章

  1. bzoj1070————2016——3——14
  2. 令人拍案叫绝的Wasserstein GAN
  3. Meanshift解析
  4. shell-1.shell注释
  5. Alpha版使用说明
  6. vs2010设置编辑器背景颜色
  7. restorecon命令
  8. Flash:任意变形工具的使用
  9. 跑通Jetson Nano TensorRt sampleSSD例程
  10. 电信客户流失数据分析(二)
  11. 计算机网络 理论复习概括
  12. 搞不定Excel没关系,这款神器让你秒变数据可视化高手
  13. 停车场管理系统(C++)
  14. 长篇好文,手机充电放电架构与工作流程原理讲解
  15. norflash/nandflash 启动分析 转
  16. Mysql 备份工具XtraBackup增量备份
  17. 最经典的消息中间件:RabbitMQ
  18. 会不会跟着AXIS2上贼船
  19. JAVA程序员平常加班严重, 如何有效率的提升自己?
  20. java动态图片_java实现gif动画效果(java显示动态图片)

热门文章

  1. 法律规则鬼畜图解||全面易懂的旅游投诉赔偿标准
  2. Android官方开发文档Training系列课程中文版:管理音频播放之控制APP的音量与播放
  3. JAVA:线程总结及多线程实现的两种方法
  4. 弄懂goroutine调度原理
  5. .net core中不支持GB2312编码的问题
  6. String, StringBuffer, StringBuilder之间的区别
  7. thinkPHP-空操作
  8. 用注册表禁止windows添加新用户
  9. 虚拟机安装CentOS6.4
  10. Junit 内部解密之一: Test + TestCase + TestSuite