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

简介: 将查询函数和修改函数分离(Separate Query from Modifier):某个函数即返回对象状态,又修改对象状态;建立两个不同的函数,其中一个负责查询,另一个负责修改

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

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

一、动机

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

二、做法

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

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

3、编译,测试

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

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

目录
相关文章
|
5月前
问题出在`megatron_util.mpu`模块中没有找到`get_model_parallel_rank`属性
问题出在`megatron_util.mpu`模块中没有找到`get_model_parallel_rank`属性
51 1
|
8月前
|
编译器 Linux 调度
RT-Thread编程高阶用法-函数扩展之$Sub$与$Super$
RT-Thread编程高阶用法-函数扩展之$Sub$与$Super$
59 0
|
Java 数据库
JPA通用策略生成器(@GeneratedValue 四种标准用法为TABLE, SEQUENCE, IDENTITY, AUTO)
JPA通用策略生成器(@GeneratedValue 四种标准用法为TABLE, SEQUENCE, IDENTITY, AUTO)
145 0
SAP QM 执行事务代码QS23为检验特性分配Selected Set的时候报错 - You cannot use entries from catalogs 1 and 3-
SAP QM 执行事务代码QS23为检验特性分配Selected Set的时候报错 - You cannot use entries from catalogs 1 and 3-
SAP QM 执行事务代码QS23为检验特性分配Selected Set的时候报错 - You cannot use entries from catalogs 1 and 3-
重构——29以数据类取代记录(Replace Record with Data Class)
以数据类取代记录(Replace Record with Data Class):你需要面对传统编程环境中的记录结构;为该记录创建一个“哑”数据对象
1513 0
重构——18自封装字段(Self Encapsulate Field)
自封装字段(Self Encapsulate Field):你直接访问一个字段,但与字段之间的耦合关系逐渐变得笨拙;为这个字段建立取值/设置函数,并且只以这些函数来访问字段
1799 0
|
测试技术
三种属性操作性能比较:PropertyInfo + Expression Tree + Delega“.NET技术”te.CreateDelegate
  在《上篇》中,我比较了三种属性操作的性能:直接操作,单纯通过PropertyInfo反射和IL Emit。本篇继续讨论这个话题,我们再引入另外两种额外的属性操作方式:Expression Tree(这和IL Emit基本一致)和通过Delegate的静态方法CreateDelegate创建相应的委托进行属性的赋值和取值。
1078 0
|
测试技术
一起谈.NET技术,三种属性操作性能比较:PropertyInfo + Expression Tree + Delegate.CreateDelegate
  在《上篇》中,我比较了三种属性操作的性能:直接操作,单纯通过PropertyInfo反射和IL Emit。本篇继续讨论这个话题,我们再引入另外两种额外的属性操作方式:Expression Tree(这和IL Emit基本一致)和通过Delegate的静态方法CreateDelegate创建相应的委托进行属性的赋值和取值。
856 0
重构——49以函数取代参数(Replace Parameter with Methods)
以函数取代参数(Replace Parameter with Methods):对象调用某个参数,并将结果作为参数,传递给另一个函数,而接受该参数的函数本身也能够调用前一个函数;让参数接受者去除该项参数,并直接调用前一个参数
1679 0
重构——50引入参数对象(Introduce Parameter Object)
引入参数对象(Introduce Parameter Object):Range模式;某些参数总是很自然的同时出现;以一个对象取代这些参数
1693 0