重构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库非常的符合我的口味,现在趁着有 ...
随机推荐
- python 本地化 local
locale 模块提供了 C 本地化( localization )函数的接口, 如 Example 8-1 所示. 同时提供相关函数, 实现基于当前 locale 设置的数字, 字符串转换. (而 ...
- InChat版,仅仅两个接口实现自己的IM系统(可兼容)
InChat 一个IM通讯框架 一个轻量级.高效率的支持多端(应用与硬件Iot)的异步网络应用通讯框架.(核心底层Netty) 版本目标:完成基本的消息通讯(仅支持文本消息),离线消息存储,历史消息查 ...
- YOLO V2论文理解
概述 YOLO(You Only Look Once: Unified, Real-Time Object Detection)从v1版本进化到了v2版本,作者在darknet主页先行一步放出源代码, ...
- 30分钟带你了解Springboot与Mybatis整合最佳实践
前言:Springboot怎么使用想必也无需我多言,Mybitas作为实用性极强的ORM框架也深受广大开发人员喜爱,有关如何整合它们的文章在网络上随处可见.但是今天我会从实战的角度出发,谈谈我对二者结 ...
- Vue项目骨架屏注入实践
相比于早些年前后端代码紧密耦合.后端工程师还得写前端代码的时代,如今已发展到前后端分离,这种开发方式大大提升了前后端项目的可维护性与开发效率,让前后端工程师关注于自己的主业.然而在带来便利的同时,也带 ...
- Html显示地图
Html可以通过JS来实现第三方地图的显示,如: 高德: 效果如下:浏览器小区域和全屏展示 代码如下:把key换成自己申请的key值 <script type="text/javasc ...
- 用Javascript 实现倒计时
用Javascript 实现倒计时<!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- array_unshift
<!DOCTYPE html> <html> <body> <?php $a=array(0=>"red",1=>" ...
- ubuntu 用户和root权限转换
1,用户权限要转换为root 输入:sudo su 或者sudo -i 然后按照提示输入相应的密码你就可以转化为root用户了. 2,root权限切换成用户权限 输入:su 如果是服务器那就输 ...
- thinkphp %s %d %f
%s -- 表示字段串%d -- 表示整形数字%f -- 表示浮点数 例子:$order_number = $m_ebay_order_numbers->where("ebay_ord ...