终于在断断续续的情况下把这本经典巨作看完了。

  这本书的全名叫做《重构-改善既有代码的设计》,原有的代码设计存在不足的地方让人感到不好维护,所以才需要去改善既有代码的设计,其实听起来会不会有点亡羊补牢的感觉?这里也提醒了我们一点:从设计代码的初期就要深思熟虑,虽然后续的改动基本无法避免,但良好的初期设计将对后续维护提供帮助。重构不是最终目的,我们的目的是让代码变得更好。

关于书的内容组织

  不得不称赞的一点是作者的写作思路是非常清晰的。整本书的开始是由一个小型案例讲起,让读者了解重构是一项什么样的工作,作者的案例设计也是挺巧妙的,值得不熟悉面向对象编程的读者反复揣摩。之后便开始讲诉重构的一些概念,包括什么是重构(在不改变软件可观察行为的前提下,调整其内部结构,整理代码的一个过程。注意与开发新功能的一个区分,开发新功能是在改变软件可观察行为)、为什么要重构(重构可以提高代码的可维护性)以及什么时候重构(添加功能、修复错误、复审代码的时候)。

  接下来就列举了一系列要点讲解不好的代码设计的一些症状。中间携带了关于测试体系的介绍,不过这一部分更多的是稍微提点一下,并没有做比较深入的分析。之后就迎来了整本书的重头戏,关于重构手法的介绍,包括如何组织函数、在对象之间搬移特性(字段、函数)、重新组织数据、简化条件表达式、简化函数调用和处理继承关系。随后也顺带介绍了大型重构的四个手法,包括梳理并分解继承体系、将过程化设计转化为对象设计、将领域与表述分离和提炼继承体系。

  本书的最后是对于重构的一个概括,作者认为真正懂得重构的一个衡量标准是”你可以自信地停止重构“,学会重构手法只是一个起点,把握何时使用、何时开始、何时停止的节奏才是使重构走向成功的关键。

阅读重构手法的心得

  书中介绍了多种重构手法,这里也不打算将其一一列举出来,而是挑选了部分让我醍醐灌顶的重构手法,以及阅读中自己的一些思考。说实在话,自己在阅读本书的时候并没有做到非常细致,特别是对于具体重构的步骤几乎是一扫而过,读得非常”粗“,可能跟我自己没有真正地处理起大型的遗留代码有关联,思维里总是回响着一股这样的声音”这个重构手法是处理这样的问题,恩,在最开始进行开发的时候就要留意这一点“,从而让我觉得这些重构的具体步骤很繁琐无趣,对于现阶段也没有较大的实用价值。或许等我真正接触到非常多的遗留代码问题,在来重读本书会有新的体会。

  1. 把关好命名原则

  良好的命名是可读代码的基础,书中对于这个概念也是非常重视的,甚至鼓励开发者在没有找到一个合适的命名前不要继续往下开发。虽然书中并没有讨论如何把握命名方式,但是这里我就班门弄斧一回,简单地谈一下自己的一些看法。

  首先要注意的第一个环节是要把握C#开发的基本命名规范,例如私有字段用‘_’开头、函数名称的首个单词最好能是一个动词、不要将变量名称命名为“temp”等,如果我们能做好这最基本的一点,让别人来看你的代码也是那么地清晰,这是不是一件美好的事情呢?所以,假如对于C#开发的基本命名规范还没有概念的话,是时候需要去恶补一下了。

  多数情况下开发都离不开业务,所以良好的命名也要结合具体业务。在分析业务的同时也要积累业务相关的词汇,例如Order表示订单,Sku表示库存量单位等,这些词汇在命名的时候可以提供支持。

  最后提及的一点策略是借鉴设计模式的词汇。虽然有时候我们不一定会在代码中使用设计模式,但是借鉴某些词汇来表达意图也是可以的,例如Factory、Adapter、Template、Bulider、Singleton、Proxy等,前人已经将经验汇集提供给了我们,我们需要做的就是好好利用它们。

  总体而言,就连作者本人也承认的一个观点是“经验会带来更多的帮助”,所以在开发中不仅要重视名称的选择,也要注重经验的积累。

  2. 使用return跳出多条件表达式

  说实在话,这是阅读本书最让我眼前一亮的重构手法了。不知道大家有没有跟我有这样的习惯:

public bool IsEnable()
{
    bool result = false;
    if (条件1)
    {
        result = true;
    }
    else
    {
        if (条件2)
        {
            result = true;
        }
        else
        {
            for (int i = 0; i < length; i++)
            {
                if (条件3)
                {
                    result = true;
                    break;
                }
            }
        }
    }
    return result;
}
多条件判断代码

相关文章:

  • 2021-11-22
  • 2021-10-14
  • 2022-03-03
  • 2021-11-11
  • 2021-10-03
  • 2021-07-25
猜你喜欢
  • 2021-09-17
  • 2021-09-11
  • 2021-06-28
  • 2021-12-20
  • 2021-12-08
  • 2022-12-23
  • 2022-01-20
相关资源
相似解决方案