重构——45将查询函数和修改函数分离(Separate Query from Modifier)

将查询函数和修改函数分离(Separate Query from Modifier)

某个函数即返回对象状态,又修改对象状态;建立两个不同的函数,其中一个负责查询,另一个负责修改

一、动机

一条好规则:任何有返回值的函数,都不应该有看得到的副作用

二、做法

1、新建一个函数,令它的返回值与原函数相同

2、修改原函数,令它调用查询函数,并返回获得的结果

3、编译,测试

4、将调用原函数的代码改为调用查询函数。然后,在调用查询函数的那一行之前,加上对原函数的调用。每次修改后,编译并测试

5、将原函数的返回值改为void,并删掉其中所有的return语句

时间: 2024-10-11 04:22:07

重构——45将查询函数和修改函数分离(Separate Query from Modifier)的相关文章

T-SQL 查询中使用的函数之系统函数

函数 查询中使用的函数   在查询语句中,不仅可查询表中列的值而且可以使用内部函数查询数据库中不同类型的信息.可以在SELECT列表,WHERE子句和任何允许表达式的地方使用内部函数.这些函数都是T-SQL对SQL的扩展.Adaptive Server提供的内部函数可以分成以下几类: l         系统函数.返回数据库中的信息: l         字符串函数.用于处理字符串或字符串表达式: l         text函数.用于处理text和image类型的数据: l         数

SQL SERVER修改函数名容易引发的问题分析_MsSql

1. 问题 今天遇到一个奇怪的问题:使用sp_helptext XXX查询出来的函数定义名竟然跟函数名不同,而sp_helptext实际是查询sys.all_sql_modules这个系统视图的.直接查询这个视图的definition字段,发现跟sp_helptext是一样的.难道是系统视图也存在缓存之类的机制?或者是个BUG?对于第一个问题,当时情况紧急,没有时间去求证是否存在了.第二个问题,我想没什么可能,SQL SERVER发展到今天(SQL 2016正式版准备推出,我使用的环境则是SQL

SQL SERVER修改函数名容易引发的问题分析

1. 问题 今天遇到一个奇怪的问题:使用sp_helptext XXX查询出来的函数定义名竟然跟函数名不同,而sp_helptext实际是查询sys.all_sql_modules这个系统视图的.直接查询这个视图的definition字段,发现跟sp_helptext是一样的.难道是系统视图也存在缓存之类的机制?或者是个BUG?对于第一个问题,当时情况紧急,没有时间去求证是否存在了.第二个问题,我想没什么可能,SQL SERVER发展到今天(SQL 2016正式版准备推出,我使用的环境则是SQL

PHP教程:GD库的imagecolorset函数简单修改图片颜色

现在有一张背景色为纯蓝色(或者红色等) 并且与照片里人物有很明显的反差色彩 的一寸单人照照片,现想把,该图片中的蓝色背景用PHP处理为白色.即类似于PS中,用白色填充蓝色的效果. 使用GD库的imagecolorset函数可以修改简单的索引色. 不过只能对gif与png图片有效 <?php$img = file_get_contents('http://图片地址);$im = imagecreatefromstring($img);$bg = imagecolorat($im, 0, 0);im

DOM节点的替换或修改函数replaceChild()用法实例

 这篇文章主要介绍了DOM节点的替换或修改函数replaceChild()用法,实例分析了replaceChild()替换DOM节点的使用技巧,需要的朋友可以参考下     本文实例讲述了DOM节点的替换或修改函数replaceChild()用法.分享给大家供大家参考.具体分析如下: DOM节点的替换过程: (1)创建新的节点: (2)找到旧的节点: (3)站在父节点的角度,使用replaceChild(新,旧)函数来替换. 代码如下: <html> <head> <scri

当文档分割-请问mfc单文档分割窗口后,原来可以显示图形的VIEW函数怎么修改才能让其显示原来发的图形。

问题描述 请问mfc单文档分割窗口后,原来可以显示图形的VIEW函数怎么修改才能让其显示原来发的图形. BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: 在此添加专用代码和/或调用基类 if(m_splitter.CreateStatic(this,1,2)==NULL) return FALSE; CRect rect; GetClientRect(&rect);

c语言-C语言:在子函数中修改结构变量中元素的值

问题描述 C语言:在子函数中修改结构变量中元素的值 要写一个处理学生成绩信息的程序,使用单向链表,创建,遍历已经没有问题,但在修改结点的数据时出现问题,输入数据后程序就停止运行. 修改的思路是先根据学号定位到指定结点,然后修改数据,修改函数如下 void Correct(float *a,float *b,float *c,float *d,float *e,float *f) { printf("请依次输入学生正确的的英语 数学 物理 C语言成绩n"); scanf("%f

vc++编程问题-大家看看这个VC++函数怎么修改

问题描述 大家看看这个VC++函数怎么修改 // mymenuView.cpp : CmymenuView 类的实现 // #include "stdafx.h" #include "mymenu.h" #include "mymenuDoc.h" #include "mymenuView.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CmymenuView IMPLEMEN

visual studio-opencv里的imread函数能否修改读入图片的路径

问题描述 opencv里的imread函数能否修改读入图片的路径 vs2013+opencv 开发环境 如题,目前用imread,只能把图片放到那个工程所在目录下才可以读 那请问有什么办法可以设置这个读入的路径呢 解决方案 可以写上绝对路径,比如x:\xxx\xxx\xxx.xxx 也可以用..得到上一层路径,从而来定位,比如..\123\xx.xxx,就是在工程目录平行的123目录下的xx.xxx