zoukankan      html  css  js  c++  java
  • 《重构》读书笔记

    # 重构~改善既有代码的设计 #

    1、介绍

    何为重构:对软件内部结构的一种调整,

    重构目的:调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。
    软件随需求而变。“实用”是软件压倒一切的要素。
    重构时机:
    1. 在添加新功能时;
    2. 在修改bug时
    3. 在代码复审时
    *注:到了最后的交付期限,不进行重构*

    重构常用:
    1、间接层
    2、接口修改时,尽量增加,而不是修改

    重构的第一步:
    为即将修改的代码*建立一组可靠的测试环境*。好的测试是重构的根本。
    重构技术就是以微小的步伐修改程序,所以应该是很容易发现错误。

    重构的节奏:

    测试、小修改、测试、小修改、测试....

    重构与性能:

    1、虽然重构可能使软件运行更慢,但它也使软件的性能优化更容易;

    2、一般的非实时系统,编写快速软件的秘密就是:首先写出可调的软件,然后调整它以求获得足够速度;

    3、找到优化点,而不盲目优化所有代码,因为程序大半时间都是只耗费在一小段代码身上;

    常思考的点

    类:是否有本类无关的函数,移动函数

    函数:函数应该放在它所使用的数据的所属对象内

    2、坏代码的味道

    1、Duplicated Code重复代码

    如果你在一个以上的地点看到相同的程序结构,那么可以肯定:设法将它们和而为一,程序会变得更好。最常见的“重复代码”就是一个类内的两个函数含有相同的表达式。另一种常见情况就是两个互为兄弟的子类内含有相同的表达式。

    采用Extract Method(提炼函数)提炼出重复的代码。

    2、Long Method 过长函数

    函数中的代码行数原则上不要多于100行。

    我们遵循这样一条原则:每当感觉需要以注释来说明点什么的时候,我们就需要把说明的东西写进一个独立的函数中,并以其用途(而非实现手法)命名。

    如果函数内有大量的参数和临时变量,它们会对你的函数提炼形成障碍。你可以经常运用Replace Temp with Query (以查询取代临时变量),来消除这些临时元素。Introduce Parameter Object (引入参数对象),PreserveWhole Object (保持对象完整)则可以将过长的参数列变得简洁一些。

    如果已经这么做了,仍然有太多的临时变量和参数,就应该使用 Replace Method with Method Object (以函数对象取代函数)。如何确定提炼哪一段代码呢?一个很好的技巧是:寻找注释。它们通常指出代码用途和实现手法之间的语义距离。如果代码前方有一行注释,就是在提醒你:可以将这段代码替换成一个函数,而且可以在注释的基础上给这个函数命名。就算只有一行代码,如果它需要以注释来说明,那也值得将它提炼到独立函数中。

    3、Large Class 过大的类

    类不要负责超越本类的职责,即前面提到的单一原则:

    运用ExtractClass (提炼类)将几个变量一起提炼到新类里。技巧:先确定客户端如何使用它们,然后运用 Extract Interface(提炼接口)为每个使用方式提炼出一个接口。可帮助你看清楚如何分解这个类。

    4、Long Parameter List 过长参数列

    过长参数不易理解和维护,太长的参数列难以理解,而且会造成前后不一致,不易使用。而且一旦你需要更多数据,就不得不修改它。如果将对象传递给函数,大多数修改都没有必要。

    5、Switch Statement (switch 惊悚现身)

    面向对象程序的一个最明显特征就是:少用switch或(case)语句。从本质上说,switch语句的问题在于重复。你常会发现switch语句散布于不同地点。如果要为它添加一个新的case子句,就必须找到所有switch语句并修改它们。面向对象中的多态概念可为此带来优雅的解决办法。

    待完善...

  • 相关阅读:
    【转】ANSI与GB2312的编码问题
    asp.net相关文件后缀名都是什么意思?
    【转】HTTP 通信http通信过程简介
    【笔记】【转载】设计模式
    【转载】DataGridView之将数据导出成Excel和Word格式
    新开博客
    ASP.NET 从Excel文件导入数据到数据库
    Asp.net 图片异步上传的简单实现
    【笔记】【转载】JohnConnor设计模式笔记(一) 学习设计模式之前你必须掌握的-看懂UML类图
    boost Smart Pointer
  • 原文地址:https://www.cnblogs.com/peterYong/p/11870669.html
Copyright © 2011-2022 走看看