《重构》心得
买了本《重构》,粗略的看了第一遍,把一些要点记录在印象笔记中了,发出来分享下。
首先是,代码的坏味道:
Duplicated Code重复代码
某些代码重复出现,可以抽象到一个新的函数中,或者抽象到父类上去。
Long Method过长函数
过长函数是指,一个函数里面实现的功能太多,越长也就越难理解。
你需要将一个过长的函数分解成各种小函数,命名是关键。
函数的参数非常的多,调用也频繁,其中一个参数被删掉,其他的参数就不是那么有意义了。
可以把这些参数抽到一个类里面,直接传这个类的对象就好了。
Large Class过大的类
一个类如果做太多的事情,就会导致内部有很多实例变量,重复代码就会出现。
考虑如何把他们分解到小的类上面。
Long Parameter List过长的参数列
一个方法的参数太多会变得很恶心
考虑,如果可以传一个对象给函数,函数可以通过这个对象获得到那些参数
Divergent Change发散式变化
如果需要修改或者添加不同的功能,需要修改不同的函数。
考虑如何把它们分到不同的类里面。
Shotgun Surgery霰弹式修改
如果需要修改或者添加某个功能,需要修改好几个地方
考虑把需要修改的地方集中到一个函数里。
Feature Envy依恋情结
如果某个函数执行的时候调用了另一个对象的大多数方法。
也许应该把这个方法移动到那个对象里面去。
Primitive Obsession基本类型偏执
将一些基本类型组成的数据抽象成小对象,money啊,phone number之类
Switch Statement switch惊悚现身
减少使用switch,就是少在case里面放太多的代码,只让它做出一个选择返回一个状态,然后具体的操作通过调用对象的函数来实现。
Parallel Inheritance Hierarchies平行继承体系
当你给一个类增加字段的时候,也要给另一个类增加同样的字段。
解决方法是,让一个继承体系的实例去引用另一个集成体系的实例。
Lazy Class冗赘类
如果一个类所得不值其身价,就让它消失
Speculative Generality夸夸其谈未来性
没有必要以“考虑到未来某天我们一定要做这样的事情”为借口做些不必要的事情。
过多的注释
优良的代码是可以直接看就能明白它的作用,复杂的代码才需要把每一步的作用都详细的说明出来。
接下来是,重构手法:
Extract Method(提炼函数)
从大方法中提炼出独立的部分,函数的细粒度越小,一是提高了它的复用性,二是它被覆写的时候更容易。
Inline Method(内联函数)
当有时候一个函数过于简短,里面的内容可能就是做一个简单的判断就返回的话,可以考虑去掉这个方法。
Inline Temp(内联临时变量)
把一些通过方法返回的变量换成那句方法的调用(query)。
Replace Temp with Query(以查询取代临时变量)
当某些临时变量只被赋一次值的时候(可以将变量声明为final,然后运行下看看是否只被赋值一次),就将这些临时变量全部换成方法的调用(或者成为query)。
Introduce Explaining Variable(引入解释性变量)
当某些语句非常的复杂,然后返回一个boolean型,然后这条长长的语句直接丢进if里判断,这会导致难以理解,可以引入解释型变量isRight之类的,将这些变量放入if中会比较好理解。
Replace Data Value with Object(以对象取代数据值)
有些数据,比如电话号码,如果仅仅用一个字符串存储可能以后操作会非常困难,它可能需要多种显示的形式,所以把看似简单的数据包装成对象会方便以后的操作。
Encapsulate Field(封装字段)
将public的字段改成private,并提供setter和getter
转载不注明出处,被人趴了肿么办,http://www.cnblogs.com/kross/p/3512800.html
相关推荐
- 作者还分享了许多关于如何克服学习障碍的心得体会,鼓励读者勇于购买书籍并深入研究。 #### 总结 《重构与模式》这本书不仅仅是关于重构和设计模式的理论介绍,更是通过丰富的实际案例和代码示例,展示了如何...
在"WEB标准心得之网页重构的思路"中,作者分享了自己的重构方法,主要基于REST、Grid和DRY(Don't Repeat Yourself)原则。以下是对这些知识点的详细说明: 1. **CSS文件组织**:遵循REST(Representational State ...
【家校社合作的反思与重构】:这篇文章探讨了当前家校社合作模式存在的问题,主要作者张永博士和张艳琼老师从实践共同体的视角出发进行深入剖析。他们指出,目前的合作模式往往演变为对学生的全天候监控,家校社合作...
### DSP基本实验心得体会 #### 实验背景与目的 在数字信号处理(DSP)的学习过程中,进行内插实验是一项重要的实践活动,旨在帮助学生理解和掌握信号重建的基本原理和技术。内插技术通常用于提高信号的质量或者...
3. **参与社区讨论**:加入相关的技术论坛或社区,与其他开发者交流心得,共同探讨设计模式的应用场景和最佳实践。 4. **持续学习和更新**:设计模式并不是一成不变的,随着技术的发展,新的模式也会不断涌现。保持...
PyCharm是由JetBrains公司开发的一款专业Python集成开发环境(IDE),具有代码自动完成、代码重构、代码分析、图形界面开发等强大功能。 描述中提到文档包括了PyCharm专业版和社区版的安装教程,说明文档会针对两种...
《新时代教师专业发展的思考与实践》的心得体会体现了当前教师职业发展的重要方向和实践策略,以下是详细的总结与解读: 1.终身学习与观念更新 新时代对教师提出了“终身学习”的要求,每位教师都必须树立这一观念...
作者可能分享了关于代码审查、单元测试、重构和遵循最佳实践的心得。 5. **团队协作与沟通**:在IT项目中,团队合作至关重要。作者可能介绍了如何建立有效的沟通机制,解决团队冲突,以及如何通过协作提升团队效率...
- **可扩展性**:对未来的功能需求保持响应能力,便于添加新功能而无需大规模重构。 - **可修改性**:易于进行小规模修改,减少错误引入的可能性。 - **灵活性**:不拘泥于固定的结构,能够适应变化的需求。 - **可...
在小学数学课堂重构的过程中,深度学习不仅是一种教学方法,更是一种教育理念的转变。它关注学生的主动探究,强调学生综合素养的培养,追求学生对知识的深入理解和应用能力的提升。 首先,深度学习在教育领域的应用...
12. **代码审查与重构**:定期进行代码审查和重构是提升代码质量和可维护性的重要手段。通过这一过程,可以学习到更好的编码习惯和设计模式。 13. **异常处理与错误调试**:掌握异常处理机制,能够在程序运行时有效...
4. 社区互动与资源共享:论坛、问答社区成为学生交流学习心得、教师分享教学资源的重要场所,增强了教育的互动性。 二、互联网重构K12教培逻辑 1. 从“填鸭式”到“引导式”:互联网教育强调以学生为中心,注重...
最后,信息化教育也带来了新的挑战,如数字鸿沟、网络安全问题、师生关系的重构等,这些都需要我们在推进教育信息化的过程中不断探索和解决。 总的来说,《信息化心得体会》这份文档很可能会涵盖以上诸多方面,深入...
它允许企业以模块化的方式添加、修改或删除服务,而不必对整个系统进行大规模重构。 SOA的优势主要体现在以下几个方面: 1. **跨企业协作**:通过互联网发布服务,SOA可以打破企业内部的界限,促进与供应链合作...
2. **调试与优化**:在源码执行过程中遇到的问题和解决方法,如错误排查、性能优化、代码重构等,都是心得体会的重要组成部分。 3. **结果分析**:实验者可能描述了如何解读仿真结果,比较实际与预期结果的差异,...
在CFD(计算流体动力学)领域,Fluent是业界广泛使用的一款流体仿真软件,它提供了多种计算多相流问题的方法,其中VOF(Volume of Fluid)模型就是专门用来模拟两相或多相流体共存且相互作用的一种方法。...
这不仅有助于提高代码的可读性和可维护性,还便于团队协作和后期的代码重构。 - **强大的社区支持和生态系统** - Spring框架拥有庞大的社区支持和丰富的生态系统。这意味着开发者可以轻松找到各种解决方案和技术...
- **数据库结构调整**:包括表分区、索引重构等,以提高查询效率。 - **项目结构调整**:优化业务逻辑,减少不必要的数据库交互,提高整体系统性能。 以上就是Oracle学习和实践中的一些核心知识点,理解并熟练...