`

《重构,改善既有代码的设计》笔记

 
阅读更多


    最近读了关于重构的这本书,突然有个想法,code不是搬砖而是一种艺术,如何写出有艺术感的代码?那就是去研究设计模式和重构。你可以学习很多技术像java的常见特性,框架的技术spring aop原理,但是我认为其实这些都是招式,只有设计模式和重构才是真正的内容,才真正让你的code有了艺术感。所以要成为一个编程艺术家必须精通设计模式和重构。

    重构原则:

    1. 重构是啥?
    不改变软件功能,提供可读性和降低修改成本


    2. 为何需要重构,重构能产生哪些价值?
    a) 重构改进软件设计,重构就像是在整理代码,越难看出代码所代表的设计意图,就越难保护其中设计,于是设计就消失的越快。经常性的重构可以让代码维持该有的形态。
    b) 重构使软件更容易理解, 便于其他人和自己阅读,便于理解原有代码的设计
    c) 重构帮助找出bug
    d) 重构提高编程速度,良好的设计才能做到快速开发。如果没有良好的设计或许某一段时间你的进展迅速,但是恶劣的设计很快会让你的速度慢下来。


    3. 何时重构
    a) 添加功能时重构 ,重构能让你更好的理解自己和别人的代码也就越越方便的添加代码,如果代码的设计无法方便的让我添加我的特性那么需要重构。
    b) 修补错误时重构,如果收到一份错误报告,这就是需要重构的信号,因为显然代码还不够清晰,没有清晰到让你一眼看出bug。
    c) 复审代码时重构,重构别人的代码可以得到最直观的理解。


    4. 怎么对项目经理说
    受进度驱动的经理需要我们尽快完成,至于怎么完成,那就是我自己的事情,我认为最快的方式是重构,所以我就重构。


    6. 重构与设计
    仍然做预先设计,但是不必一定找出正确的解决方案。重构让日后的修改成本不再高昂。


    7. 重构与性能
    开发时不对性能投以必要的关注,直至到性能优化阶段,通常只需要改动一小段代码就可以极大的提高性能,因为90%的性能问题都在10%的代码逻辑处。

    坏代码的味道

    1. 重复代码 (Duplicated Code)

    2. 过长的代码 (Long Method)

    3. 过大的类  (Large Class)

    4. 过长的参数列表 (Long Parameter List)

    5. 发散式变化,一个类多个维度变化(Divergent Change)

    6. 霰弹式修改,一个变化设计多个类(Shotgun Surgery)

    7. 依恋情节,对别的类的兴趣高过自己类(Feature Envy)

        解决:把当前方法移动到另一个类中

    8. 数据泥团,多个类的字段同时出现,函数有相同的入参(Data Clumps) (如thirdpartOrderId 和source)

        解决:为这些字段创建一个新的对象

    9. 基本类型偏执 喜欢基本类型多过对象 (Primitive Obsession)

   10.Switch Statement

   11.平行继承,为一个类增加子类必须为另一个类增加子类(Parallel Inheritance Hierarchies) 

   12.冗余类,当前没有作用的类(Lazy Class)

   13.夸夸其谈未来性,过度事前设计(Speculative Generality)

        过度抽象,很多抽象类和钩子方法,可以在将来发现代码冗余再做抽象。

   14.对象的临时变量,只为特殊情况而设(Temporary Field)

        实例内的部分变量只为特殊情况存在,这样会给人疑惑,建议重新定义一个新的对象保存这些临时变量。

   15.过度耦合的消息链,客户端代码和查找对象高耦合(Message Chains)

   16.中间人,类大半的方法都委托给中间人(Middle Man)

   17.狎昵关系,两个类过度关注对方的private部分(Inapproriate Intimacy)

   18.异曲同工的类(Alternative Classes With Different Interface)

   19.不完美的类库,为类库增加新的行为(Incomplete Library Class)

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

   21.被拒绝的遗赠,继承无用的属性和方法(Refused Bequest)

   22. 过多的注释,过多的注释往往需要重构代码(Comments)

      a) 过多的注释往往说明代码很糟糕

      b) 如果你不知道该做什么,这才是注释的良好运用时机

      c) 此外,注释还可以用来标记你并无十足把握的区域

 

   自动化单元测试

     a) 使用自动化测试工具 如junit

     b) 每当收到bug报告,为自己添加新的单元测试

     c) 测试最可能出错的代码,不用面面俱到

 

 

 

分享到:
评论

相关推荐

    重构 改善既有代码的设计笔记

    重构 改善既有代码的设计笔记 网络转载,分享快乐

    《重构_改善既有代码设计》观后感PPT

    【美】马丁福勒 著 是国际著名的面向对象分析设计、UML、模式等方面的专家,敏捷开发方法的创始人之一 重构_改善既有代码设计 软件工程领域的超级经典巨著,与另一巨著《设计模式》并称"软工双雄

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

    《重构-改善既有代码的设计》是一本经典的软件开发著作,由Martin Fowler著述,旨在指导开发者如何通过重构来提升代码质量、可读性和维护性。重构是软件开发过程中的一个关键环节,它不是简单的修改代码,而是系统地...

    重构_改善既有代码的设计.rar

    《重构:改善既有代码的设计》是由马丁·福勒(Martin Fowler)所著的一本经典IT著作,由侯捷翻译成中文。这本书详细阐述了重构这一关键的软件开发实践,旨在提高代码的质量、可读性和可维护性。在编程领域,重构是...

    重构:改善既有代码的设计(第2版)学习笔记

    《重构:改善既有代码的设计(第2版)》是一本由马丁·福勒(Martin Fowler)编著的经典软件工程书籍,主要关注的是如何通过一系列微小的改变来逐步改进现有代码的质量,提升软件设计的可读性、可维护性和可扩展性。...

    《重构-改善既有代码的设计》电子书以及总结的书中源码

    《重构-改善既有代码的设计》是一本经典的软件开发著作,由Martin Fowler撰写,它深入探讨了重构这一关键的软件工程实践。重构是提高代码质量、可读性和维护性的重要手段,通过对现有代码进行一系列微小的改进,而不...

    ZeromaXHe#BlogBackup#【笔记】《重构:改善既有代码的设计》第5章-重构列表1

    第5章 重构列表5.1 重构的记录格式每个重构方法都有如下五个部分:概要(summary)简单介绍此重构方法的适用情景,以及它所做的事情。动机(motivati

    重构关键问题整理分析笔记摘要

    根据《重构 改善既有代码结构》一书,摘录重点整理分析得出的一个PPT,希望对大家有点帮助

    自己学习系统架构整理出的学习笔记

    重构改善既有代码设计.pdf 是关于代码优化的重要资料。重构是提升代码质量的过程,通过改进代码结构,而不改变其外在行为。常见的重构技术包括提取函数、替换魔术数字、引入参数对象等,目的是提高代码可读性、可...

    Java版水果管理系统源码-RefactorMindMap:重构第一版重构手法读书笔记思维导图

    重构:改善既有代码的设计 第一版以OOP为主 针对书本的核心部分6-11章做了思维导图可视化。 突然发现第二版上个月上市,直接下单了精装版,把这个坑填完我就自己去读第二版了哈哈 Link 第二版安利 为什么决定再版...

    计算机基础1

    【计算机基础1】这个主题包含了四本非常重要的书籍,它们分别是《编程珠玑》、《编码:隐匿在计算机软硬件背后的语言》、《程序员思维修炼》和《改善既有代码的设计》。这些书籍覆盖了计算机科学的基础知识,编程...

    leetcode安卓-Note:学习笔记

    改善既有代码的设计。 参考 编写可读代码的艺术。 Google 开源项目的代码风格规范。 :memo: 后记 About 本仓库主要是总结的学习笔记。 笔记不是从网上到处拼凑而来,除了少部分引用书上和技术文档的原文,其余都是...

    微软研发探秘系列课程(6):微软研发揭秘之贺岁版——2006年程序员书籍畅谈 (思想篇)

    例如,可能讨论了《重构:改善既有代码的设计》如何帮助开发者提升代码质量,或者《设计模式:可复用面向对象软件的基础》如何指导团队实现模块化设计。 课程中可能包含的PPT部分,会系统地梳理这些书籍的核心观点...

    技术图书。001需要的不多。。技术图书。

    - 《重构:改善既有代码的设计》:帮助程序员学会如何改进现有代码结构而不改变其功能。 2. **前端开发**: - 《HTML与CSS设计与构建网站》:适合初学者学习网页布局的基础知识。 - 《JavaScript高级程序设计》...

    java2018面试宝典

    - 编码实践部分可以参考《重构:改善既有代码的设计》和《编写可读代码的艺术》。 - 代码风格规范建议参考Google开源项目的风格。 这份宝典不仅提供了复习的知识点,也强调了编码实践和正则表达式等实用技能的掌握...

Global site tag (gtag.js) - Google Analytics