Separate Query from Modifier(分离查询和修改)
某个函数既返回对象状态值,又修改对象状态
重构:建立两个不同的函数,其中一个负责查询,另一个负责修改
动机
如果某个函数只是向你提供一个值,没有任何看得到的副作用,那么这是个很有价值的东西。
你可以任意调用这个函数,也可以把invoke搬到函数的其他地方。
明确表现出“有副作用”与“无副作用”两种函数之间的差异,是个很好的想法。下面是一条好规则:任何有返回值的函数,都不应该有看得到的副作用。
什么是“看得到的副作用”?有一种常见的优化方法:将查询所得结果缓存于某个字段中,这么后续的重复查询就可以大大加快速度。虽然这种做法改变了对象的状态,但这种修改是察觉不到的,因为不论如何查询,你总是获得相同结果。
并发问题
如果在一个多线程系统中,一个惯用手法:在同一个动作中完成检查和赋值。这是否和Separate Query from Modifier 互相矛盾呢?两者并不矛盾,但你需要做一些额外工作。你需要保留第三个函数来同时做两件事。这个“查询-修改”函数将调用各自独立的查询函数和修改函数,并声明synchronized。
Separate Query from Modifier(分离查询和修改)相关推荐
- [JSP暑假实训] 四.MyEclipse+Servlet+JSP实现火车票网站查询、修改、删除操作
本系列文章是作者暑假给学生进行实训分享的笔记,主要介绍MyEclipse环境下JSP网站开发,包括JAVA基础.网页布局.数据库基础.Servlet.前端后台数据库交互.DAO等知识. 前一篇文章讲解 ...
- 01.query的分类-条件查询和组合查询
文章目录 1. es单个条件查询和组合查询 2.query和filter context 1. query context 2. filter context 3.使用样例 1. es单个条件查询和组 ...
- 树状数组的建树 单点修改 单点查询 区间修改 区间查询
单点修改 单点查询 用普通数组就能写出来 单点修改 区间查询 用线段树 树状数组: 区间修改 区间查询 用线段树 树状数组: 区间修改 单点查询 用线段树 树状数组: 建 ...
- oracle删除查询的数据库语句,Oracle简略的语句 查询 删除 修改(1)
Oracle简单的语句 查询 删除 修改(1) Dual系统表介绍 数据类型: 数据是信息数字表现形式,信息的加工处理是以大量的结构化数据为载体进行的,数据库管理系统的核心是数据库,数据库的主要对象是 ...
- 查询和修改mysql最大连接数的方法
查询和修改mysql最大连接数的方法 切换到mysql库里查询 show variables like 'max_connections'; show global status like 'Max_ ...
- 量具管理-查询及修改功能
量具管理-查询及修改功能 此模块可以查询过期和即将过期量具的清单,并能够修改校准日期和查看校准报告 建立文件queryclass.py # -*- coding: utf-8 -*- import o ...
- SpringBoot学习之旅(七)---JPA进阶篇之自定义查询、修改、分页
文章目录 前言 源码下载 其他文章 查询关键字 自定义Select和Update 分页及自定义分页 自定义分页 分页查询的业务代码 前言 前一节SpringBoot学习之旅(六)-JPA操作MySql ...
- 【Git】Git 基础命令 ( 添加暂存文件 git add | 提交文件至版本库 git commit | 查看版本库状态 git status | 查询文件修改 git diff )
文章目录 一.添加暂存文件 git add 二.提交文件至版本库 git commit 三.查看版本库状态 git status 四.查询文件修改 git diff 一.添加暂存文件 git add ...
- SELinux系列(十三)—默认安全上下文的查询和修改(semanage命令)
前面讲到,restorecon 命令可以将文件或目录恢复成默认的安全上下文, 这就说明每个文件和目录都有自己的默认安全上下文, 事实也是如此,为了管理的便捷, 系统给所有的系统默认文件和目录都定义了默 ...
最新文章
- bzoj1070————2016——3——14
- 令人拍案叫绝的Wasserstein GAN
- Meanshift解析
- shell-1.shell注释
- Alpha版使用说明
- vs2010设置编辑器背景颜色
- restorecon命令
- Flash:任意变形工具的使用
- 跑通Jetson Nano TensorRt sampleSSD例程
- 电信客户流失数据分析(二)
- 计算机网络 理论复习概括
- 搞不定Excel没关系,这款神器让你秒变数据可视化高手
- 停车场管理系统(C++)
- 长篇好文,手机充电放电架构与工作流程原理讲解
- norflash/nandflash 启动分析 转
- Mysql 备份工具XtraBackup增量备份
- 最经典的消息中间件:RabbitMQ
- 会不会跟着AXIS2上贼船
- JAVA程序员平常加班严重, 如何有效率的提升自己?
- java动态图片_java实现gif动画效果(java显示动态图片)
热门文章
- 法律规则鬼畜图解||全面易懂的旅游投诉赔偿标准
- Android官方开发文档Training系列课程中文版:管理音频播放之控制APP的音量与播放
- JAVA:线程总结及多线程实现的两种方法
- 弄懂goroutine调度原理
- .net core中不支持GB2312编码的问题
- String, StringBuffer, StringBuilder之间的区别
- thinkPHP-空操作
- 用注册表禁止windows添加新用户
- 虚拟机安装CentOS6.4
- Junit 内部解密之一: Test + TestCase + TestSuite