`
iamxi
  • 浏览: 192258 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

《重构》学习笔记二

阅读更多

    何谓重构,对它熟悉后估计理解都不用,作者说了两个概念,动词和名词,意思都差不多,无法就是通过调整软件内部的结构来达到想要的样子。

 

 

 

 

 

一、为何重构

    改进软件设计 :

    不管开始的时候设计是多么好的一个软件,随着越来越多的修改,之前的设计也会被埋在代码堆里面。重构能够整理之前的设计,甚至改变原来设计不足的地方。

 

    使软件更易被理解 :

    代码总会给其他开发人员看或是浏览其他开发人员的代码,甚至自己回头看自己以前的代码。做开发的都有这样的经历,看别人的代码,不是一般的头疼。为了大家,为了项目,我们应该重构代码,使其容易理解。在看别人代码的时候,重构之,也可以加快自己对代码的理解。我以前都是傻呼呼的看别人的垃圾代码,一直在抱怨,可是从来没动手重构过。看了这个后,回去试试了,发现的确理解代码逻辑的速度快乐好多。个人觉得糟糕的代码不是看不都,只是我们大脑无法记住那复杂的东西(大脑堆栈不够用),而那些优秀的代码,从代码的结构上就开始帮助阅读者理解。

 

    帮组找 BUG

    这个个人感觉可以参考上面那条。容易看懂程序,自然容易发现 BUG

 

    提高编程速度:

    单从光写代码角度来看,按业务写一篇代码是最快的,为了重构,一个对重构不熟练的我,需要多话三分之一的时间在重构上。不过随着需求的变化等,会发现那些大段不知所云的代码的确十分影响进度,而且很难修改或是加入好的设计。

 

二、何时重构

    三次法则 :

    用我初中语文老师的话,好事不过三,更何况坏事,要一而再再而三的忍受无法入目的代码,也是一种本事。

 

    添加功能时重构:

    很容易理解

 

    修补错误时重构:

    同上

 

    复审代码时重构:

    从来没在大公司呆过,所以没经历过代码的复审,看作者的意思是由专人对一部分代码进行检查。

 

Kent Beck Why refactoring works 中说的比较贴切,大部分时间我们只知道现在要做什么,而很难预知未来需要做什么,这样我们无法为未来留下更多的余地。所以,等到明天变今天的时候我们去重构,以求容易修改。

 

三、怎么向经理说? 是个很严重的问题,不过是个情商活,我就不多说了,借口千千万万,一个就足够。

 

这里作者介绍了 Kent Beck 关于中间层的论述,我没搞懂,感觉理解很别扭(我阅读能力太差了吧),有时间看了英语原文在补上。

 

四、重构的难题

    数据库重构: 我现在就遇到这个问题,做数据库表结构的重新设计和数据的迁移时,真的无从下手啊,经验少了点,唉。作者说在对象模型和数据库模型中间加入个分隔层。没试验过,作者也没说怎么实现,难道像 hibernate 那样。

 

    修改接口:

    万恶的 EJB ,对远程调用提供接口,害的我都没法改接口。作者说的保留原接口,实现新接口的方法是个中庸之道,在无法同步修改的情况下,这个方法很好。原来的旧接口直接用适配模式或是装饰模式,用新的接口实现老接口的功能。

 

    难以通过重构来改动的设计模式:

    系统的大范围模式变动,估计不是重构能办得到的。

 

五、何时不该重构

    作者之说了在赶进度的时候(恐怕这个时间在项目开发中占大部分),其他未知。

 

六、重构与设计

    这个部分主要将了过度的预先设计和完全不进行预先设计两个极端的存在。过度的预先设计,最求在动手写代码前为整个系统包括未来的扩展和变化都设计好;完全不进行预先设计则是上来就动手写代码,随遇而安,后期在整理设计。

低级程序员就是浑浑噩噩写程序;进阶了,发现设计很重要,就开始拼命的实现做完美的设计(我现在就这个阶段,悲哀,被一语道破啊)。作者的观点就是要预先设计,但不能过度,开发也要不断重构。结合上面的“今天要做什么”和“明天要做什么”,个人觉得是先要为当前的做设计,等后面的变动过来后,在做合理的变动(包括重构和修改原有设计)。 Ron Jeffries 提供的例子很好的说明了空谈主义的悲剧。

 

七、重构和性能

    一句话,对于那些对性能要求不是很苛刻的系统,其他都是先编码 + 重构,完了在整个系统统一优化性能。

  • 大小: 13.1 KB
  • 大小: 15 KB
分享到:
评论

相关推荐

    31天重构学习笔记中文版

    ### 二、具体重构案例分析 #### 2.1 集合的封装(Encapsulate Collection) - **原始代码**:使用`IList<T>`作为集合暴露接口,允许外部直接修改集合内容。 - **问题分析**:直接暴露集合可能导致集合状态被意外...

    重构 学习笔记 refactoring martin fowler

    二是使软件更容易被理解,重构有助于提升代码的可读性,帮助开发者更快地理解代码,从而提高工作效率。 重构的时机通常有三个:在添加新功能时、修复错误时、代码审查时。在这些时刻,对代码进行重构不仅可以保持...

    .NET 快速重构 - 学习笔记

    .NET 快速重构学习笔记是针对开发者提升代码质量和可维护性的重要指南。重构是一个系统性的过程,旨在改善软件设计,优化代码结构,而不改变其外在行为。在.NET开发环境中,重构是不可或缺的技能,它可以帮助开发者...

    [免费高清PDF]31天重构系列笔记.rar

    《31天重构系列笔记》是一本专注于C#编程语言重构技术的教程,该资源以免费高清PDF的形式提供。重构是软件开发过程中的一种重要实践,它旨在改进代码结构,提高可读性和可维护性,而不会改变外部行为。在31天的时间...

    31天重构学习笔记.docx

    2. **控制**:封装允许开发者精确地控制集合的访问和修改行为,例如,在添加或移除元素时可以添加额外的业务逻辑。 3. **可维护性**:封装提高了代码的可读性和可维护性,因为外部代码不需要关心集合内部的实现细节...

    《重构》----学习笔记

    《重构》是一本深入探讨软件开发过程中的代码优化与改进的经典著作。重构,简单来说,是在不改变软件外部行为的前提下,对其内部结构进行改进,以提高代码的可读性、可维护性和可扩展性。这一过程并非依赖于个人天赋...

    Eclipse开发学习笔记.pdf

    ### Eclipse开发学习笔记知识点解析 #### 一、Eclipse工作台(Workbench) Eclipse工作台是Eclipse提供的集成开发环境的核心部分,旨在为开发者创建一个无缝集成的工具集,以便于管理和导航工作空间资源。它是开发...

    JSP_Servlet学习笔记(第2版).pdf

    《JSP & Servlet学习笔记(第2版)》是作者多年来教学实践经验的总结,...《JSP & Servlet学习笔记(第2版)》以“微博”项目贯穿全书,将JSP & Servlet技术应用于实际项目开发之中,并使用重构方式来改进应用程序架构。

    Eclipse 开发学习笔记.pdf

    **Eclipse 开发学习笔记** Eclipse是一款强大的集成开发环境(IDE),主要用于Java应用程序的开发,但通过插件也可以支持其他编程语言,如C++, Python等。这份《Eclipse开发学习笔记》是针对想要深入理解和掌握...

    java JDK 8学习笔记

    本学习笔记旨在深入解析JDK 8的关键特性,帮助初学者快速掌握这一版本的核心知识。 1. **lambda表达式**:JDK 8引入了lambda表达式,简化了函数式编程。它允许将匿名函数作为方法参数,或者用作方法返回值。Lambda...

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

    《重构:改善既有代码的设计(第2版)》是一本由马丁·福勒(Martin Fowler)编著的经典软件工程书籍,...通过学习和实践书中的重构技巧,我们可以更好地理解和改善我们的代码,从而创造出更加健壮、可维护的软件系统。

    重构笔记

    《重构笔记》主要探讨的是软件开发过程中的一个重要实践——重构,它是提高代码质量、可维护性和...通过深入阅读这份文档,开发者可以学习如何在实践中提升自己的重构能力,从而打造出更加优雅、易于维护的软件系统。

    代码重构总结实例

    - "31天重构学习笔记"可能提供了每日重构技巧和案例,帮助深入理解重构过程。 - "Java重构示例"系列文档可能展示了Java代码重构的具体步骤和实践。 - "SVN搭建和使用手册"及"SVN中文教程"提供了关于SVN的详细指南...

    超详细的springboot学习笔记

    ### Spring Boot 学习笔记概览 #### 一、Spring 的发展历程 1. **Spring 1.x 时代:** - 在Spring框架发展的初期(即Spring 1.x时代),主要采用XML作为配置文件来管理Bean的声明周期。这种方式在项目规模较小的...

    active mq 学习笔记

    ### ActiveMQ学习笔记知识点梳理 #### 一、ActiveMQ简介 **定义:** - **ActiveMQ**是由Apache出品的一款功能强大的开源消息中间件。作为消息队列(Message Queue,简称MQ)的一种,它主要用来在分布式系统之间...

    peoplecode学习笔记

    ### PeopleCode学习笔记知识点概述 #### 一、PeopleCode简介 PeopleCode是PeopleSoft系统中的一个集成编程语言,主要用于自定义应用逻辑与处理流程。它为开发者提供了强大的工具集来扩展和修改现有的PeopleSoft应用...

    C#学习笔记

    ### C#学习笔记知识点解析 #### 面向对象编程的理解 标题中提到的“面向对象是本本主义、洁癖的体现”这句话反映了一种对面向对象编程(Object-Oriented Programming, OOP)的看法。面向对象编程是一种程序设计范式...

    学习笔记-能量生成模型EBGAN2

    "学习笔记-能量生成模型EBGAN2" 学习笔记-能量生成模型EBGAN2是基于生成对抗网络(GANs)的理论分析和模型设计的笔记。该笔记首先回顾了EBGAN模型的判别器设计,然后引入了EBM(Energy Based Model)的概念,解释了...

Global site tag (gtag.js) - Google Analytics