概念:本文中的”为布尔方法命名”是指如果一个方法带有大量的bool 参数时,可以根据bool 参数的数量,提取出若干个独立的方法来简化参数。
正文:我们现在要说的重构并不是普通字面意义上的重构,它有很多值得讨论的地方。当一个方法带有大量的bool 参数时,会导致方法很容易被误解并产生非预期的行为,
根据布尔型参数的数量,我们可以决定提取出若干个独立的方法来。具体代码如下:
...
分类:
其他 时间:
2015-07-21 10:39:47
收藏:
0 评论:
0 赞:
0 阅读:
153
概念:本文中的”避免双重否定”是指把代码中的双重否定语句修改成简单的肯定语句,这样即让代码可读,同时也给维护带来了方便。
正文:避免双重否定重构本身非常容易实现,但我们却在太多的代码中见过因为双重否定降低了代码的可读性以致于非常让人容易误解真正意图。存在双重否定的代码具有非常大的危害性,因为这种类型的代码容易引起错误的假设,错误的假设又会导致书写出错误的维护代码,最终会导致bug产...
分类:
其他 时间:
2015-07-21 10:39:37
收藏:
0 评论:
0 赞:
0 阅读:
240
概念:本文中的”引入契约式设计”是指我们应该对应该对输入和输出进行验证,以确保系统不会出现我们所想象不到的异常和得不到我们想要的结果。
正文:契约式设计规定方法应该对输入和输出进行验证,这样你便可以保证你得到的数据是可以工作的,一切都是按预期进行的,如果不是按预期进行,异常或是错误就应该被返回,下面我们举的例子中,我们方法中的参数可能会值为null的情况,在这种情况下由于我们没有验...
分类:
其他 时间:
2015-07-21 10:39:35
收藏:
0 评论:
0 赞:
0 阅读:
215
在一些算法中,经常会用到随机数,最常用的随机数有两种,一是服从均匀分布的随机数,二是服从高斯分布(正态分布)的随机数。在标准C中并没有产生高斯分布的随机数发生器,只有服从均匀分布的随机数发生器rand(),那么如何通过rand()来模拟出高斯分布特征的伪随机数呢?这就是本文的话题。
实验原理:高斯分布的随机数在概率上服从高斯分布,如果通过rand()产生某个区间的随机数,通过高斯分布的概...
分类:
其他 时间:
2015-07-21 10:39:17
收藏:
0 评论:
0 赞:
0 阅读:
148
因为HTML5流行及其功能的强大,越来越多的人加入HTML5的学习。当然,目前大部分人学习都是通过网络,HTML5同样有许多教学网站,那么HTML5在线学习网站有哪些?现在请看我为大家推荐的HTML5在线学习网站。...
分类:
Web开发 时间:
2015-07-21 10:39:07
收藏:
0 评论:
0 赞:
0 阅读:
210
概念:本文中的”分解复杂判断”是指把原来复杂的条件判断等语句用尽快返回等方式简化代码。
正文:简单的来说,当你的代码中有很深的嵌套条件时,花括号就会在代码中形成一个长长的箭头。我们经常在不同的代码中看到这种情况,并且这种情况也会扰乱代码的可读性。
如下代码所示,HasAccess方法里面包含一些嵌套条件,如果再加一些条件或者增加复杂度,那么代码就很可能出现几个问题:1,可读性...
分类:
其他 时间:
2015-07-21 10:38:57
收藏:
0 评论:
0 赞:
0 阅读:
145
题目:
Given a binary tree, find its minimum depth.
The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
题意:
给定一棵二叉树,返回它的最小高度。
最小高...
分类:
编程语言 时间:
2015-07-21 10:38:47
收藏:
0 评论:
0 赞:
0 阅读:
269
概念:本文中的“引入参数对象”是指当一个方法的参数过多或者过为复杂时,可以考虑把这些参数封装成一个单独的类。
正文:如果一个方法所需要的参数大于5个,理解该方法的签名就变得比较困难,因为这样感觉参数很长、样式不好并且没有分类,所以我们有必要把参数进行封装。
namespace LosTechies.DaysOfRefactoring.SampleCode.ParameterObject....
分类:
其他 时间:
2015-07-21 10:38:37
收藏:
0 评论:
0 赞:
0 阅读:
200
概念:本文中的”合并继承”是指如果子类的属性和方法也适合于基类,那么就可以移除子类,从而减少依赖关系。
正文:上一篇我们讲到“提取子类”重构是指当基类中的一个责任不被所有的子类所需要时,将这些责任提取到合适的子类中。而我们今天所要讲的的“合并继承”重构一般用在当我们觉得不需要子类的时候。
如下代码所示,StudentWebSite子类除了有一个属性用来说明网站是否是活动的外没有别的责任,...
分类:
其他 时间:
2015-07-21 10:38:27
收藏:
0 评论:
0 赞:
0 阅读:
162
概念:本文中的”提取子类”是指把基类中的一些不是所有子类都需要访问的方法调整到子类中。
正文:当你的基类中存在一些方法不是所有的子类都需要访问,你想将它们调整到子类中时,这个重构会变得很有用了。如下代码所示,我们需要一个 Registration类用来处理学生选课的信息。但是当Registration类开始工作后,我们意识到我们会在两种不同的上下文中使用Registration类,...
分类:
其他 时间:
2015-07-21 10:38:17
收藏:
0 评论:
0 赞:
0 阅读:
161
概念:本文中的“提取工厂类”是指如果要创建的对象很多,则代码会变的很复杂。一种很好的方法就是提取工厂类。
正文:一般来说我们需要在代码中设置一些对象,以便获得它们的状态,从而使用对象,所谓的设置通常来说就是创建对象的实例并调用对象的方法。有时如果要创建的对象很多,则代码会变的很复杂。这便是工厂模式发挥作用的情形。工厂模式的复杂应用是使用抽象工厂创建对象集,但我们在这里只是使用基本的...
分类:
其他 时间:
2015-07-21 10:38:08
收藏:
0 评论:
0 赞:
0 阅读:
144
概念:本文中的“使用条件判断代替异常”是指把没有必要使用异常做判断的条件尽量改为条件判断。
正文:如下代码所示,在日常的编码中我们经常需要用到异常来控制程序流,Start方法里面用try catch 做条件判断,我们知道这里没有必要使用这种方式,因为你不需要做类型不可控的类型转换,也不需要处理异常行为,所以我们应该对它进行重构。
namespace LosTechies.DaysOf...
分类:
其他 时间:
2015-07-21 10:37:57
收藏:
0 评论:
0 赞:
0 阅读:
243
#include
#include
#include
#include "XZip.h"
//复制文件夹实现
void copy_all_file(LPCSTR file_path, std_string &backup_path) //第一个参数为被复制文件,第二个是复制到的地址
{
if(!(boost::filesystem::exists(backup_path.c_str())...
分类:
其他 时间:
2015-07-21 10:37:47
收藏:
0 评论:
0 赞:
0 阅读:
272
概念:本文中的“封装条件”是指条件关系比较复杂时,代码的可读性会比较差,所以这时我们应当根据条件表达式是否需要参数将条件表达式提取成可读性更好的属性或者方法,如果条件表达式不需要参数则可以提取成属性,如果条件表达式需要参数则可以提取成方法。
正文:如下代码所示,PerformCoolFunction里面的if条件判断比较复杂,看起来有点杂乱,所以就把它提出来。
using Sys...
分类:
其他 时间:
2015-07-21 10:37:37
收藏:
0 评论:
0 赞:
0 阅读:
200
题目:选课系统,每个人选5门课,如果很多人选择相同5门课认为这个组合比较热门,
现在要求出选择最热门课程组合的选择人数。
分析:数据结构,STL。对每组数据先排序,然后利用map统计求解即可。
(也可以使用hash表或者利用long long压缩排序统计)
说明:如果有很多人们组合,都算在一起。
#include
#include
#i...
分类:
其他 时间:
2015-07-21 10:37:27
收藏:
0 评论:
0 赞:
0 阅读:
184
概念:本文中的“提取方法对象”是指当你发现一个方法中存在过多的局部变量时,你可以通过使用“提取方法对象”重构来引入一些方法,每个方法完成任务的一个步骤,这样可以使得程序变得更具有可读性。
正文:如下代码所示,Order 类中的Calculate方法要完成很多功能,在之前我们用“提取方法”来进行重构,现在我们采取“提取方法对象”来完成重构。
using System.Collect...
分类:
其他 时间:
2015-07-21 10:37:00
收藏:
0 评论:
0 赞:
0 阅读:
169
概念:本文中的“分解依赖” 是指对部分不满足我们要求的类和方法进行依赖分解,通过装饰器来达到我们需要的功能。
正文:正如下面代码所示,如果你要在你的代码中加入单元测试但有一部分代码是你不想测试的,那么你应用使用这个的重构。下面的例子中我们应用静态类来完成某些工作,但问题是在单元测试时我们无法mock静态类,所以我们只能引入静态类的装饰接口来分解对静态类的依赖。从而我们使我们的调用类只需要依...
分类:
其他 时间:
2015-07-21 10:36:39
收藏:
0 评论:
0 赞:
0 阅读:
133
概念:本文中的把某些计算复杂的过程按照功能提取成各个小方法,这样就可以使代码的可读性、维护性得到提高。
正文:如下代码所示,CalculateGrandTotal方法里面包含了多个逻辑,第一计算subTotal 的总和,第二subTotal 要循环减去discount,也就是计算Discounts,第三就是计算Tax。所以我们可以根据功能把他们拆分成三个小方法。
using Sy...
分类:
其他 时间:
2015-07-21 10:36:38
收藏:
0 评论:
0 赞:
0 阅读:
230
概念:本文中的“提取接口” 是指超过一个的类要使用某一个类中部分方法时,我们应该解开它们之间的依赖,让调用者使用接口,这很容易实现也可以降低代码的耦合性。
正文:如下代码所示,RegistrationProcessor 类只使用到了ClassRegistration 类中的Create方法和Total 字段,所以可以考虑把他们做成接口给RegistrationProcessor调用。
n...
分类:
其他 时间:
2015-07-21 10:35:27
收藏:
0 评论:
0 赞:
0 阅读:
112
概念:本文中的“使用委派代替继承”是指在根本没有父子关系的类中使用继承是不合理的,可以用委派的方式来代替。
如下代码所示,Child 和Sanitation (公共设施)是没有逻辑上的父子关系,因为小孩不可能是一个公共设施吧!所以我们为了完成这个功能可以考虑使用委派的方式。
namespace LosTechies.DaysOfRefactoring.ReplaceInherit...
分类:
其他 时间:
2015-07-21 10:35:17
收藏:
0 评论:
0 赞:
0 阅读:
101