`
magicxin
  • 浏览: 17344 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

代码的坏味道(2)—重构改善代码的既有设计

阅读更多

代码的坏味道就像病人的病状一样,知道了病状,就可以对症下药。文中的重构手法在书中都可以找到。

Duplicated Code

1、同一个类的两个函数含有相同的表达式。重构手法:Extract Method

2、两个互为兄弟的子类内含相同的表达式。重构手法:Extract Method+Pull Up Method或Extract Method+Form Template Method/Substitute Algorithm

3、两个毫不相关的类出现重复代码。重构手法:Extract Class

Long Method

程序愈长愈难理解。我们应该积极地分解函数。可以将过长函数分割成几个小函数,好处就在于解释能力、共享能力、选择能力。遵循这样一条原则:每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立函数中,并以其用途(而非实现手法)命名。重构手法:Extract Method(用于提炼函数)、Replace Temp with Query(用于消除临时变量)、Introduce Parameter Object(用于消除过长的参数)、Preserve Whole Object(为了获取对象的属性方便)、Decompose Conditional(用于分解条件表达式)

Large Class

单个类做太多事情,就会出现太多实例变量,太多的代码,那么Duplicated Code 就自然而然的来了。重构手法:Extract Subclass、Extract Class、Extract Interface

Long Parameter List

太长的参数列难以理解,太多参数会造成前后不一致、不易使用,而且一旦你需要更多数据,就不得不修改它。重构手法:Replace Parameter with Method(将参数用查询方法代替)、Preserve Whole Object、Introduce Parameter Object

Feature Envy(依恋情结)

对象:将数据和对数据的操作行为包装在一起。函数对某个类的兴趣高过对自己所处类的兴趣,一个很明显的例子,某个函数为了计算某个值,从另一个对象那里调用了几乎半打的取值函数,这就是依恋情结。重构手法:Extract Method(提炼函数)+Move Method(移到合适的函数中)

Primitive Obsession

要习惯在小任务上使用对象,如结合数值和币种的money类、由一个起始值和一个结束值组成的range类等。重构手法:Replace Data Value with Object、Replace Type Code with Subclass/Repace Type Code with State/Strategy(替换类型码)

Switch Statements

switch语句的问题就在于重复。面向对象程序可以用多态来优雅地解决以前switch的代码。一看到switch语句,就该考虑是否可以使用多态来替换它。重构方法:Extract Method+Move Method+Replace Type Code with Subclasses/Replace Type Code with State/Strategy+Replace Conditional with Polymorphism(多态)、Replace Parameter with Explicit Methods(使用明确函数取代参数)+Introduce Null Object(不用多态)

Temporary Field

类内有某个实例变量仅为某种特定情况而设,如类中有一个复杂算法,需要好几个变量,为了不传递一长串参数而出现的针对该算法的Temporary Field。重构手法:Extract Class、Intoroduce Null Object。

Middle Man

封装——对外部世界隐藏其内部细节。封装往往会伴随着委托。但过度地委托是不利的。如果某个类一半的函数都委托给另一个函数,这时候就表示过度委托。重构手法:Remove Middle Man、InlineMethod(放进调用端)、Replace Delegation with Inheritance

以上就是我感兴趣的部分。其实还有很多坏味道呢,如Divergent Change、Shotgun Surgery、Data Clumps、Parallel InheritanceHierarchies、Data Class等等。

 

分享到:
评论

相关推荐

    重构改善既有代码的设计第2版.pdf

    重构改善既有代码的设计第2版.pdf 本书主要讨论了如何通过重构来改善既有代码的设计,提高代码的可维护性、可读性和可扩展性。下面是对书中重要的知识点的总结: 1. 重构的定义和重要性:重构是指对既有代码的修改...

    重构_重构_改善既有代码_

    《重构:改善既有代码设计》是一本由Martin Fowler所著的经典IT著作,它详细阐述了在软件开发过程中如何通过重构来提升代码质量、可读性和维护性。重构是一种系统性的方法,旨在不改变软件外在行为的前提下,改进其...

    重构改善既有代码的设计PPT课件

    重构是软件开发过程中的一个重要环节,它关注于改善已有代码的设计,以提高代码的可读性和维护性,同时保持原有功能不变。通过重构,程序员能够更有效地管理代码,提升开发效率,减少错误,并促进团队成员之间的沟通...

    重构-改善既有代码的设计

    于是萌生想做一本重构工具书的想法,本来打算自己重新将重构书的内容再整理归类一下,后来发现原书的目录编排就很适合做工具书,包括坏味道分类,重构手法归类等,都有了一个比较系统的整理。因此,我利用空余时间...

    《重构 改善既有代码的设计》之代码的坏味道

    ### 《重构 改善既有代码的设计》之代码的坏味道 #### 代码的坏味道简介 重构是一种改进代码质量的重要手段,它不仅能够提升代码的可读性和可维护性,还能帮助开发者更好地理解现有系统架构。《重构 改善既有代码...

    重构-改善既有代码的设计

    第3章 代码的坏味道 75 3.1 Duplicated Code(重复代码) 76 3.2 Long Method(过长函数) 76 3.3 Large Class(过大的类) 78 3.4 Long Parameter List(过长参数列) 78 3.5 Divergent Change(发散式...

    重构-改善既有代码的设计(含中文PDF,英文chm)

    这个过程涉及识别代码中的坏味道(code smell),然后应用一系列微小的、精确的修改,逐步改善代码的整体架构。Fowler在书中详细列举了多种重构模式,这些模式都是经过实践验证的代码优化策略。 书中的中文PDF和...

    重构-改善既有代码设计

    《重构-改善既有代码设计》是一本专注于软件开发过程中代码优化和重构的权威书籍,尤其对Android、Java、C和C++等编程语言的开发者具有很高的参考价值。本书旨在通过详细的实例和深入的分析,教导读者如何有效地改进...

    重构-改善既有代码的设计+中文版.pdf 侯捷 侯俊杰

    《重构-改善既有代码的设计》是由Martin Fowler所著的一本软件工程领域的经典书籍,中文版由侯捷翻译,与《设计模式》齐名,被广泛认为是软件开发人员提升编程技能的必读之作。书中展示了超过70种行之有效的重构方法...

    重构_改善既有代码的设计完整版

    《重构:改善既有代码的设计》是一本由Martin Fowler所著的经典IT著作,专注于软件开发中的重构技术,旨在提升代码质量并优化设计。重构是软件开发过程中一个至关重要的环节,它通过对现有代码结构进行细微但系统化...

    重构-改善既有代码的设计+中文版.pdf

    重构-改善既有代码的设计+中文版代码重构 代码的新思维 何为优秀代码 代码的坏味道 如何重构 设计重构 设计的基本原理 重构到模式 架构重构

    重构 改善既有代码的设计 中文版

    《重构:改善既有代码的设计》是一本在IT行业中极具影响力的书籍,主要探讨的是如何通过重构技术来提升软件代码的质量和可维护性。作者是著名的软件开发专家Martin Fowler,他在书中详细阐述了重构的重要性和实施...

    重构 改善既有代码的设计繁体PDF带标签版

    《重构:改善既有代码的设计》是一本由马丁·福勒所著的经典IT著作,中文繁体版带有侯捷的翻译和注解。这本书是软件开发领域的重要参考书,特别是对于那些致力于提高代码质量和可维护性的程序员和团队。标签中的...

    重构-改善既有代码的设计.pdf

    根据提供的文件信息,“重构-改善既有代码的设计.pdf”这一标题及描述表明这是一份专注于讨论如何通过重构技术来优化和改进现有代码结构及其设计的文档。重构是软件开发中的一个重要概念,它指的是在不改变软件外部...

    重构-改善既有代码的设计(英文版)

    《重构:改善既有代码的设计》是由Martin Fowler等人所著的一本软件开发领域的经典之作。这本书详细阐述了重构的概念、原则和方法,是所有致力于提高软件质量、追求代码设计优雅的程序员不可或缺的学习资料。 重构...

Global site tag (gtag.js) - Google Analytics