如果你有一个引用对象,很小且不可改变,而且不易管理,你就需要考虑将他改为一个值对象.在Change Value to Reference我们说过,要在引用对象和值对象之间做选择,有时候并不容易,有了重构,做出选择之后,你还有一条回头路. 如果你发现引用对象开始变得难以使用,你就考虑是否应该把它改为值对象.引用对象必须被某种方式控制,你总是必须向其控制者请求适当的引用对象.如果你让你造成在你系统内存之间变得错综复杂.或者在分布系统和并发系统中,不可变值特别有用(你需要考虑可变对象引用对象他们的同步…
看见一个过长的函数或者需要一段注释才能让人理解的代码,可以考虑将这段代码放进一个独立函数中. 创造一个新的函数,根据这个函数的意图来对它命名(以它“做什么”来命名,而不是以它“怎么做”命名). 需要重构的代码如下(代码并不复杂,只是为了说明方法): function print () { var num = 1; console.log('*****************'); console.log('******Hello******'); console.log('***********…
C++存在按值传递和按引用传递两种传递方式,Java严格按照按值传递这种方式来进行.以按值传递方式的角度来说,如果你 int test(int a) { ) { a = 1; } return a; } 对于传入参数a进行再次赋值就违反了这个规则.因为你对传入参数进行重新赋值会让代码阅读者产生歧义,他们搞不清甚至看不懂你参数到底代表什么含义,甚至会对你这个参数的稳定性表示担忧.当然,如果在C语言中,对于传出参数 int test(int a, int *ok) { ) { a = ; *ok =…
Replace Temp with Query,顾名思义,表示你用查询来替换临时变量本身,临时变量对于函数来说是只有当前函数可见的,如果你在同类的别的地方要用到这个变量你就必须重新写表达式来获取这个变量,这样的话你就会在不经意间让你的函数变得复杂起来,所以如果你想要使用Extract Method,那么Replace Temp with Query是必不可少的一个步骤.而我们前面介绍的Inline Temp其实是这个手法的一部分,两者的区别在于Inline Temp已经有了表达式自身,只需要做简…