Extract Method 有一段代码可以被组织在一起并独立出来,一个函数过长,让人难以理解,这时候通过提取函数,把大的函数分成各个小的函数,为小的函数取个合适的函数名。来表明它是做什么事情的。无局部变量,有局部变量,对局部变量再赋值。
Inline Method 一个函数体内的代码表达出和函数名称同样清晰。就不必再用一个函数把它提取出来
Inline Temp 如果一个临时变量只被赋值一次,而它又妨碍了其他重构方法。
Replace Temp with Query 如果一个临时变量被赋值一次某个计算的结果,将这个运算提取到函数中,新的函数就可以被其他函数使用。临时变量的问题在于,它只能被所属的函数使用,所有它会导致写更长的函数。而且如果在类中,其他函数也能获取这个计算的信息。
Split Temporary Variable 分解临时变量,代码种的临时变量被赋值超过一次,但是它不是循环变量,也不是计算结果。
Replace Method with Method Object 有一个大型的无法,局部变量,使你无法使用Method
Move Method 函数体内,与另外一个对象有更多的交流,应该把该函数移到另一个对象内。
Move Field 某个字段被所在的另一个类更多使用
Extract Class 某个类做了两个或以上类做的事情
Hide Delegate 客户通过一个委托类来调用另一个对象,将委托关系隐藏起来,减少依赖。
Remove Middle Man 是上面的Hide Delegated类似于逆向的过程,就是大量做了简单的委托操作,就可以去除这层委托。
Introduce Foreign Method 添加函数,无法修改类。
Self Encapsulate 封装字段。子类可以重写一个函数改变获取数据的途径,灵活的数据管理方式。可以延迟初始化等。
Replace Data Value with Object 有一项数据,需要与其他数据和行为一起使用才有意义。
Change Value to Reference 生成多个不同的对象,希望他们替换为同一个。
Replace Array with Object 有一个数组,其中保持着各自元素代表不同的属性,可以为它创建一个对象。
Replace Type Code with Subclasses 有一个类型码,它会影响类的行为。当你用这个类型码,去做一些行为的时候,可以它当前的类,当做基类,然后每个类型码生成一个子类,重写函数,来决定它的行为。这样可以避免写大量switch,或者if else。
Consolidate Duplicate Conditional Fragments 条件语句的每个分支都有相同的代码,把它提取到外面。
Remove Control Flag 在布尔表达式种,某个变量充当标记作用,可以用break,return去除它。
Replace Nested Conditional with Guard Clauses 条件逻辑的难以让人看情况执行的路径,用guard clauses处理特殊的情况。
重构 改善既有代码的设计笔记
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 何时重构、何时停止重构学会判断一个类内有多少实例变量算是太大、一个函数内有多少行代码算太长 下面是对各种坏味道的简...