重构技术分享

?重构(Refactoring):在不改变软件的功能和外部可见性的情况下,为了改善软件的结构,提高清晰性、可扩展性和可重用性而对软件进行的改造,对代码内部的结构进行优化。

?重构与设计是互补的,程序应该是先设计,而在开始编码后,设计上的不足可以用重构来弥补.

?设计应该是适度的设计,而不必过度的设计.如果能很容易的通过重构来适应需求的变化,那么就不必过度的设计,当需求改变时再重构代码 。

?在设计时就对程序花费的时间进行预算,通常用于性能要求极高的实时系统.普通的企业应用程序一般对性能要求不高.只要不太慢就可以了

?短期,可能使得软件变慢,但它使优化阶段软件性能调整更容易,最终得到较好的效果

代码编写的22坏味道:

(1)Duplicated Code(重复的代码)

(2)Long Method(过长函数)

(3)Large Class(过大类)

(4)Long Parameter List(过长参数列)

(5)Divergent Change(发散式变化)

(6)Shortgun Surgery(霰弹式修改)

(7)Feature Envy(依恋情结)

(8)Data Clumps(数据泥团)

(9)Primitive Obsession(基本型别偏执)

(10)Switch Statements(switch惊悚现身)

(11)Parallel Inheritance Hierarchies(平行继承体系)

(12)Lazy Class(冗赘类)

(13)Speculative Generality(夸夸其谈未来性)

(14)Temporary Field(令人迷惑的暂时值域)

(15)Message Chains(过度耦合的消息链)

(16)Middle Man(中间转手人)

(17)Inappropriate Intimacy(狎昵关系)

(18)Alternative Classes with Different Interfaces(异曲同工的类)

(19)Incomplete Library Class(不完善的程序库类)

(20)Data Class(纯稚的数据类)

(21)Refused Bequest(被拒绝的遗赠)

(22)Comments(过多的注释)

重新组织函数:

(1)Extract Method(提炼函数)

(2)Inline Method(将函数内联化)

(3)Inline Temp(将临时变量内联化)

(4)Replace Temp With Query(以查询取代临时变量)

(5)Introduce Explaining Variable(引入解释性变量)

(6)Split Temporary Variable(剖解临时变量)

(7)Remove Assignments to Parameters(移除对参数的赋值动作)

(8)Replace Method with Method Object(以函数对象取代函数)

(9)Substitute Algorithm(替换你的算法)

在对象之间移动特性(Moving Features Between Objects):

(1)Move Method(搬移函数)

(2)Move Field(搬移值域)

(3)Extract Class(提炼类)

(4)Inline Class(将类内联化)

(5)Hide Delegate(隐藏「委托关系」)

(6)Remove Middle Man(移除中间人)

(7)Introduce Foreign Method(引入外加函数)

(8)Introduce Local Extension(引入本地扩展)

重新组织你的数据(Organizing Data):

(1)Self Encapsulate Field(自封装值域)

(2)Replace Data Value with Object(以对象取代数据值)

(3)Change Value to Reference(将实值对象改为引用对象)

(4)Change Reference to Value(将引用对象改为实值对象)

(5)Replace Array with Object(以对象取代数组)

(6)Duplicate Observed Data(复制「被监视数据」)

(7)Change Unidirectional Association to Bidirectional(将单向关联改为双向)

(8)Change Bidirectional Association to Unidirectional(将双向关联改为单向)

时间: 2024-10-20 15:32:01

重构技术分享的相关文章

Coding for Speed 技术分享

上周和公司技术同事们作了次<Coding for Speed>技术分享,本来这只是再普通不过的技术探讨和交流(虽然挂了个颇有噱头的名称),但分享的时候逻辑没理好,语速很快,时间也太紧,因此难言是合格的"分享"."探讨",所以我觉得有必要以简短的文章形式对原 PPT 作点补充,即便分享的内容很少也很简单. 本文将按原 PPT 的内容顺序分别作扩展说明或阐述,部分敏感信息将隐去,或只会简单提及. 作本技术分享的初衷,一是在工作中了解及接触了一些我个人认为可优

UWP 手绘视频创作工具技术分享系列

开篇先来说一下写这篇文章的初衷. 初到来画,通读了来画 UWP App 的代码,发现里面确实有很多比较高深的技术点,同时也是有很多问题的,扩展性,耦合,性能,功能等等.于是我们决定从头重构这个产品,做一个全新的 “来画Pro” 出来,历经三个月的世间,这个产品终于正式上架. (做个小广告,在 Windows 应用商店搜索 “来画Pro” 就可以找到,目前公司定位为收费应用,但是有一个月试用期,如果大家感兴趣,可以跟我要免费代码.这里是 IT之家的报道:https://www.ithome.com

vue技术分享之你可能不知道的7个秘密

本文是vue源码贡献值Chris Fritz在公共场合的一场分享,觉得分享里面有不少东西值得借鉴,虽然有些内容我在工作中也是这么做的,还是把大神的ppt在这里翻译一下,希望给朋友带来一些帮助. 一.善用watch的immediate属性 这一点我在项目中也是这么写的.例如有请求需要再也没初始化的时候就执行一次,然后监听他的变化,很多人这么写: created(){ this.fetchPostList() }, watch: { searchInputValue(){ this.fetchPos

感知开源的力量-APICloud Studio开源技术分享会

2014.9.15 中国领先的"云端一体"移动应用云服务提供商APICloud正式发布 2015.9.15,APICloud上线一周年,迎来第一个生日 这一天,APICloud 举办APICloud Studio开源技术分享会 我们将对APICloud Studio进行技术开源的全面解析, APICloud Studio遵循Aptana3.0 GPL开源协议,源代码以无条件继承GPL开源协议的方式贡献给业界. 我们相信,通过开源技术分享,我们将和广大开发者一起,不断扩展主流HTML开发

技术分享(持续更新)

这次的技术分享跟大家介绍一个出现在Tinder and Potluck中的动画效果实现思路,最贴心的是作者提供了OC和Swift两个版本来供开发者使用. OC:https://github.com/zhxnlai/ZLSwipeableView, Swift:https://github.com/zhxnlai/ZLSwipeableViewSwift 非常丝滑顺畅的效果,童鞋们都来上手实践一下吧~

尖峰7月线上技术分享--Hadoop、MySQL

7月2号晚20:30-22:30 东大博士Dasight分享主题<大数据与Hadoop漫谈> 7月5号晚20:30-22:30  原支付宝MySQL首席DBA分享主题<MySQL发展趋势,MySQL各个分支介绍>.<MySQL 5.6版本特性介绍及如何从MySQL 5.5向MySQL 5.6> 7月10号晚20:30-22:30 东大博士Dasight分享主题<Hadoop与Nosql技术的适用性分析> 7月12号晚20:30-22:30  原支付宝MySQ

GIS技术分享 -- 开篇

本人GIS小生一枚,学习和实践GIS已有一段时间.有一小小的愿望 - 希望能够利用自己从事GIS方面的经历,与大家共勉,让大家认识GIS.了解GIS,最终熟悉GIS技术与未来. 我主要写一些GIS的工程理论和技术,偏开发.现在我想我的线索可能是WebGIS,3DGIS两块内容的分享,所有的内容都会以实际开发一个GIS系统为例,探索相关理论和技术. 声明:本人也是在学习的路上,希望与各位们共同学习,共同进步! GIS技术分享 -- 开篇,布布扣,bubuko.com

【技术分享会】谈谈公司内部的技术分享

这段时间,为了促进程序同事间技术氛围,在公司内部组织开展技术分享会.形式很简单,每周进行一次技术分享:分享人由组员顺序安排:题材不限,可以是自己熟悉的技术,比如说服务端的开发者,分享后端定时器,消息队列等等,前端的开发者分享加载的模式,MVC模式等等,可以是一些通用的技术,比如数据结构,算法,代码风格,Effective 系列,调试技巧等,甚至可以是经典书的读后感等等,抑或是最近大家在研究一个开源的项目,也可以跟大家讲一下这个开源项目的框架:或许有些人利用业余时间做了一个小软件,也可以拿出来分享

【沙龙】2014 天山论剑 首届Oracle数据库技术分享交流沙龙

<2014 天山论剑 首届Oracle数据库技术分享交流沙龙>引言:牛顿说"我之所以成功,是因为我站在巨人的肩膀上".每个人都有思考的盲点,借由别人指出你的盲点,实现自我反省,是成功者具备的品质.遇到问题,不再自我摸索,找教练.你和什么样的人在一起,你就会变成什么样的人.只有改变才会带来改变,要想事情变好,只有你先变好. [活动目的] 为了帮助新疆区域内企业更好地利用数据库技术创造更多的利润,推动新疆地区ORACLE数据库技术在企业中的应用,帮助更多的技术人员提高自身的数据