《Refactoring Improving the design of existing code》--Martin Fowler
chapter-1
例子1:根据不同类型电影,租期长短,计算价格,并输出。写到一个方法了。
可能变化:增加/改变输出样式,电影类型分类可能会变,计费标准会变。
只有优秀的人才能写出人易读的代码。机器永远会理解。
方法/变量名称,是代码清晰的关键。
方法应该放在,它使用的数据所属对象内,这样依赖低。
2,一个电影可以在生命周期内修改分类,一个对象却不能修复所属类。
不能创建电影子类,但可以创建价格子类。replace type with state/strategy,
把type相关行为移到state/strategy内部。
模式取决于:state:代表电影的某个状态,strategy代表计费策略。反映对结构的想法。
面向对象:思考对象的职责。
重构随时随地。
事不过三,三则重构。
重构可以取代预先设计。
switch少用,switch意味着重复。
间接层/方法:价值大于代价(易读复用)才有必要存在。
重复是万恶之源
chapter-6
6.1 extract method 以它“做什么”命令,不是怎么做。
6.4 replace temp with query 。临时变量尽量用final修饰。
double getPrice(){return getBasePrice * discountFactor();}
6.5 introduce explaining variable 解释性变量
boolean isMacOs = platform.indexOf("MAC") > -1;
if( isMacOs && isIEBrower){...}
chapter-7
如果一个类承担太多责任,考虑extract class,如果太鸡肋,考虑inline class
chapter-8
状态码
不变、且行为相同,不用抽取。比如性别男女。
不变、行为不同,抽取子类。
可变,生命周期内可变、或其他原因不能继承,使用state/stratege模式
chapter-9简化方法调用
查询、修改方法分离。getTotalAndSetSum()-->getTotal(),setSum();
参数超过4个时,使用对象封装参数。
工厂方法:根据类型码,提供一组类的,对象构造方式。接口简单统一。
如果有向下转型的代码,首先考虑是否可以用模板类代替。
组合:子类不需要父类的很多操作和接口。接口不能反映子类的功能,意图混淆。
继承:需要使用受delegation的类的所有方法,则改为继承。
类内部field自我封装:直接使用变量,直到它带来麻烦为止,自我封装是方便子类覆盖。
replace data value with object 把电话号码抽取成对象,因为有格式化,抽取区号,登方法
new Customer(1).store(),new Customer(2).store(),store(){list.add(this);}
多个order对应同一个customer,应该只对象改为引用对象,使用工厂
引用对象回提高难度
数组,集合,只应用于一组类似对象,如果不是使用包装对象替换,replace array with object
比如:一个元素是名字,第二个是分数,就应该封装为对象。
相关推荐
NULL 博文链接:https://aqxiebin.iteye.com/blog/1579688
如何改善代码的设计-读《重构》读书笔记.pdf
《重构商业:产业互联网时代的商业模式重构》读书笔记模板.pptx
虽然这本书已经出版了很久,但是在这20年左右时间里,重构的核心思想并没有过时,许多实际的重构手法并没有什么重大变化。让我觉得是时候考虑再版有几个原因:一个原因是,第1版里的代码已经很陈旧了,书里面还有...
个人读书笔记,学习共享,希望每个苦恼于代码一坨坨混乱不堪的程序员都能学习. * 整洁代码的意义? 可读性,可维护性。 * 如何写出整洁代码? 1.只做一件事 2.不重复 3.有表达力 * 整洁代码的态度要求,要遵守...
clean code和重构的读书笔记,都是思维导图,方便记忆。
重构-福勒(WIP) 我的学习笔记来自阅读《 第三章-代码中的不良气味1.神秘的名字函数,模块,变量和类的名称混乱。 确保他们清楚地传达他们的工作方式和使用方法。 2.重复的代码同一代码结构存在多个地方。 它需要在...
重构:改进现有代码的设计 – Martin Fowler 成为更好的编码员破解编码面试 - Gayle Laakmann McDowell 其他 软技能:软件开发人员生活手册 – John Sonmez OCP Oracle 认证专家 Java SE 11 开发人员完整学习指南 –...
阅读笔记-阿⾥妈妈AI智能⽂案 ⽂章⽬录 之前解决⽂本多样性的⽅法 1. 修改loss 主要代表是的相关研究,提出了新的⽬标函数 MMI 对 Seq2Seq进⾏建模。 原始的⽬标函数采⽤ log-likelihood 建模, 这个loss的问题是,...
标题摘要介绍难度2 详读并 记笔记可转述正标出不理解的名间 提问批判性思考改进重构作者的作到新 不是③献综述 学术观点 t 理论法1批判性归纳与评论堆砌只研究意
【美】马丁福勒 著 是国际著名的面向对象分析设计、UML、模式等方面的专家,敏捷开发方法的创始人之一 重构_改善既有代码设计 软件工程领域的超级经典巨著,与另一巨著《设计模式》并称"软工双雄
《从零开始学架构》精华笔记 《从零开始学架构》这本书的内容主要包含以下几部分:1) 架构设计基础,包括架构设计相关概念、历史、原则、基本方法,让架构设计不再神秘;2) 架构设计流程,通过一个虚拟的案例,...
安卓艺术开发探索读书笔记,EffectiveJava读书笔记. 收集各大神博客以及安卓笔记,安卓面试笔记等方便手机端查看. 更新说明 v2.2.2 1.增加了一些最近在学习比较好的安卓大神的博客. 2.增加了来自GeniusVJR整理的安卓...
UML与模式应用 ------我看到的第一本让我佩服的书,也是OO方面我的启蒙书,这本书我看了三遍,笔记记了一大堆,每次都有新的收获,而且最近还计划在仔细阅读一遍! 设计模式 可复用的软件设计基础------一本计算机界...
我在阅读Martin Fowler的“重构:改进现有代码的设计(第二版)”时的个人笔记。 它仅包含一些基本概念作为我的理解。 如果您想了解更多,我强烈建议您购买该书。 如果您是发布者,并且认为此存储库不应该公开,请...
本书是在《解析极限编程》第一版面世的5年之后,作者重新考虑,整理和重构XP的基础上写成的,也是作者不断参与软件开发项目的心路历程和对XP的许多新的深刻理解。 本书共分两部分。第1部分包括第1章至第16章,阐述...
重构,主要指修改已有的阅读笔记,极少情形下会修改源码 (注2) :recycle: (5) :pencil: 校对,主要指更正错别字、调整源码分组、修改源码排版等 :pencil2: (6) :check_mark_button: 发布测试文件 :white_check_mark:...
Essential .NET 读书笔记 [第一部分] NET FrameWork的Collections支持 .NET的反射在软件设计上的应用 关于跨程序集的反射 实现C#和VB.net之间的相互转换 深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述...
这个博客将用来记录在使用R过程中的笔记和感想,欢迎大家与我交流数据分析方面的知识〜 欢迎大家RSS订阅我的博客,只需要复制http://brucezhaor.github.io/feed.xml到邮箱或订阅阅读器之类的地方就可以了。 郑重声明...
用于求解张量序列格式的常微分方程的时间相关 AMEn 算法 用法 一、最小变体 下载此代码(使用 GIT ...尝试重构test_lyap.mTT-Toolbox 并在笔记本电脑上运行它。当 MATLAB 耗尽内存时,感受一下 {d,R} 格式的必要性。