重构Tips
一,重新组织函数
1.首先找出局部变量和参数.
1>任何不会被修改的变量都可以当作参数传入.
2.去掉临时变量Replace Temp with Query.用查询函数代替临时变量
3.Extract Method
难点:有局部变量依赖.(用方法返回值的方式去赋回值)
4.Inline Method内联函数(三段式)
5.Introduce Explaining Variable引入解释性变量,(和2相反)
6.Split Temporary Variable(分解临时变量:针对每次赋值,创造一个独立\对应的临时变量)
7.移除对参数的赋值(更明确,不会误解按引用传递和按值传递)
8.已函数对象取代函数(将这个函数放进一个独立对象中,如此依赖局部变量就变成了对象内的字段.然后就可以在同一个对象中将这个大型函数分解为多个小型函数)
二,在对象之间搬移特性
1,Move Method(有个函数与所驻类之外的另一个类有过多的交流,调用后者或呗后者调用.那么,在该函数最常引用的类中建立一个有着类似行为的新函数,将旧函数变成一个单纯的委托函数,或是将旧函数完全移出)
2,Move Field(搬移字段,某个字段被其所驻类之外的另一个类更多地用到)
3,Extract Class(提炼类,将相关的字段和函数从旧类搬移到新类)
4,隐藏"委托关系"(客户通过一个委托类去调用另一个对象)
5,引入外加函数(你需要为提供服务的类添加一个函数,但你无法修改这个类.在客户类中建立一个函数,并以第一参数形式传入一个服务类实例)
6,引入本地扩展(用继承或聚合的方式去做类扩展)
三,重新组织数据
1.自封装字段(为类字段建立getter/setter方法,并且只以这个函数访问字段)
2.以对象取代数据值(你有一个数据项,需要与其他数据和行为一起使用才有意义)
3.以字面量常量代替无意义数(宏定义或常量)
4,以子类取代类型码(类继承结构,多态)
5,用state(状态模式)/strategy(策略模式)代替类型码 ([都是用到多态的基本方式]状态模式:多个状态变换,将这些状态子类化,然后由一个state manager来管理这些状态[多态]; 策略模式:将不同算法分配到子类中去)
6,用字段取代子类(你的各个子类的唯一差别只在"返回常量数据"的函数身上,那么修改这些函数,使他们返回超类中的某个(新增)字段,然后销毁子类)[反多态.技巧,Replace Constructor with Factory Method用工厂方法将子类实例化的过程封装在工厂方法里,从而消除对子类的引用]
如:Peopele createMale(){return new Male();};
Peopele p = createMale();
四,简化函数调用
1.Separate Query from Modifer(将查询函数和修改函数分开,类的单一化设计)
2.Replace Parameter with Explicit Methods(以明确函数取代参数)
如:void setValue(String name,int value){if xxxx}
改为两个语义化且明确的方法名:
void setName(){};
void setValue(){};
3.引入参数对象(有利弊,会引入结构依赖)
4.以工厂函数取代构造函数
如:Peopele createMale(){return new Male();};
Peopele p = createMale();
参考资料:<重构:改善既有代码的设计>
重构Tips的更多相关文章
- Isomorphic JavaScript: The Future of Web Apps(译)
Isomorp ...
- 重构(Refactoring)技巧读书笔记(General Refactoring Tips)
重构(Refactoring)技巧读书笔记 之一 General Refactoring Tips, Part 1 本文简要整理重构方法的读书笔记及个人在做Code Review过程中,对程序代码常用 ...
- 《重构》中Tips总结
1 如果你发现自己需要为程序添加一个特性,而代码结构使你无法很方便地达到目的,那就先重构那个程序,使特性的添加比较容易进行,然后再添加特性. 2 重构之前,首先检查自己 ...
- 重构网页过程中的小tips
1.display为inline-block的元素可以使用virtical-align:middle来使得元素垂直居中对齐 2.在一些按钮标签或者mark标签中,如果文本内容确定不会改变长度的话,可以 ...
- 【转】40个良好用户界面Tips
一个良好的用户界面应具有高转换率,并且易于使用.但要用户体验良好并不容易做到,下面我们整理了40个良好用户界面Tips,希望能对你有帮助! 1 尽量使用单列而不是多列布局 单列布局能够让对全局有更好的 ...
- CSS代码重构与优化之路
作者:@狼狼的蓝胖子 网址:http://www.cnblogs.com/lrzw32/p/5100745.html 写CSS的同学们往往会体会到,随着项目规模的增加,项目中的CSS代码也会越来越多, ...
- CSS代码重构
CSS代码重构的目的 我们写CSS代码时,不仅仅只是完成页面设计的效果,还应该让CSS代码易于管理,维护.我们对CSS代码重构主要有两个目的:1.提高代码性能2.提高代码的可维护性 提高代码性能 提高 ...
- 10个加速Table Views开发的Tips(转)
本文由CocoaChina译者yake_099(博客)翻译,作者:David McGraw原文:10 Actionable Performance Tips To Speed Up Your Tabl ...
- 【前端】一步一步使用webpack+react+scss脚手架重构项目
前言 前几天做了一个项目:[node]记录项目的开始与完成——pipeline_kafka流式数据库管理项目:因为开发时间紧迫,浅略的使用了一下react,感觉这个ui库非常的符合我的口味,现在趁着有 ...
随机推荐
- 机器学习 MLIA学习笔记(二)之 KNN算法(一)原理入门实例
KNN=K-Nearest Neighbour 原理:我们取前K个相似的数据(排序过的)中概率最大的种类,作为预测的种类.通常,K不会大于20. 下边是一个简单的实例,具体的含义在注释中: impor ...
- Python 以指定宽度格式化输出
当对一组数据输出的时候,我们有时需要输出以指定宽度,来使数据更清晰.这时我们可以用format来进行约束 mat = "{:20}\t{:28}\t{:32}" print(mat ...
- python 将列表中的字符串转为数字
本文实例讲述了Python中列表元素转为数字的方法.分享给大家供大家参考,具体如下: 有一个数字字符的列表: numbers = ['1', '5', '10', '8'] 想要把每个元素转换为数字: ...
- MongoDB(课时14 正则运算)
3.2.4.9 正则运算 如果想实现模糊查询,必须使用正则表达式,而且正则表达式使用的语言是Perl兼容的正则表达式的形式. 要实现正则使用,则按照如下的定义格式: 基础语法:{key : 正则标记} ...
- Java 集合-Arrays工具类的介绍
2017-10-31 18:39:46 Arrrays工具类:此类包含用来操作数组(比如排序和搜索)的各种方法. 常用方法: 主要是数组的一些常用方法如: asList:将数组转成集合 binaryS ...
- spring boot 日志文件配置(logback-spring.xml)亲测可用!
问题描述:如何配置springboot项目,通过日志配置,使之输出自定义日志. 详细文章:https://blog.csdn.net/gebitan505/article/details/701421 ...
- 认识网页:html + css + JavaScript
参考资料:爬虫课程 认识网页 使用chrome,右键检查,查看网页源码,左侧的html,右侧的css,底下的JavaScript. 网页 = HTML(内容) + CSS(样式) + JavaScri ...
- Android 列表使用(ListView GridView Gallery图片计时滚动)
ListView 作用: 1.将数据填充到布局. 2.处理用户的选择点击等操作. 根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAd ...
- Leetcode 92
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...
- python 小练习 11
桌子上有一堆数量不超过20的果子,每个果子的重量都是不超过20的正整数,全部记录在列表 L 里面.小明和小红决定平分它们,但是由于他们都太自私,没有人愿意对方比自己分得的总重量更多.而果子又不能切开, ...