`
qinysong
  • 浏览: 193402 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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

阅读更多
读完《重构——改善既有代码的设计》,感觉写得真是非常得好,非常的细腻而且深入,建议还没有读过的找时间读一读,肯定受益良多。

之前写程序也总是不停的重构、重构,读完这本书之后才发现对于重构的理解以前是很肤浅的,很不成体系的。《重构》真是一本好书!
下面粗略地概括一下对重构的理解,也整理一下之前不是很清楚的概念。

1、《重构》有一个很好的动机,也可以说是价值观,就是程序第一是写给人看的,而不是写给机器看的。
根据这一价值观,其他多种利益纷至沓来,比如当程序有了良好的可读性和可理解性,程序中隐藏的Bug便很容易浮出水面,开发进度也更加顺畅,并且对于系统将来的结构变更和扩展,程序也更加具有灵活性。

2、《重构》与《设计模式》的关系,在《设计模式》和《重构》中都有提出“设计模式为重构提供了目标”,在之前对这句话的理解总是朦朦胧胧,觉得有道理但又不是很深刻,现在觉得有两个词非常的关键:目标和目的。

设计模式为重构提供了目标,但不是目的。

设计模式是经过证实的在一定场景下解决一般设计问题的解决方案的核心,通过设计模式我们很好得解决了某种问题,并且便于我们思考和交流,降低沟通之间的理解误差,此外同样重要的,设计模式增强了可复用性,便于将来扩展和维护。

而重构是对程序内部结构的一种调整,其目的是在不改变“软件之可察行为”的前提下,提高其可理解性,降低其修改成本(《重构》的名词性定义)。

所以如果我们把软件开发比作在大海中航行,设计模式就是遍布在大海中的航标,他可以引导我们驶向目的地——高可读性、可理解性、可扩展性、可维护性。所以设计模式是重构的目标(航标)而不是目的,设计模式可以帮助我们更好更快的抵达目的地(准确地说是无止境的),而避免触礁或偏离航向

3、重构和优化,在之前的开发中,优化的意识要比现在(看完《重构》之后)强的多,如果遇到在一个循环中可以做多个事情的时候,决定把每件事情分开放到单独的循环中是要鼓起很大的勇气的,而现在便可以轻松的决定,因为清晰的代码在需要性能优化时有更宽的道路可以选择,并且往往这种决定不会造成真正的性能影响。
分享到:
评论
23 楼 xly_971223 2007-04-09  
迷信? 重构里面的东西都是迷信吗?
22 楼 sharong 2007-04-09  
也在看这本书,说老实话,书写的还可以,就是太浅,不够深入,80%的重构方法我还没看这本书前就会了,因为eclipse,idea等IDE已经提供了重构选项,还是不要迷信大师的好。
21 楼 zeng1980 2007-04-08  
cozone_柯中 写道
书到是有,只是没时间读.

我书也是早买了,没时间看,看了上边的对重构的讨论,感觉很值得一看
20 楼 qinysong 2007-03-30  
xly_971223 写道
重构和设计模式怕的就是为了重构而重构 为了模式而模式
凡事太刻意了 就会偏离了方向
我的体会是从TDD到重构,然后从重构中发现模式
直接用模式可能会出现过度设计等问题

为了模式而模式其实在过度设计中所占的比重并不大,过度设计大部分是为满足“对将来可能需求”的扩展性灵活性而预先设计的,之后这些可能需求并没有成为真正的需求,但是设计却保留下来了

所以“从TDD到重构,然后从重构中发现模式”固然是一个非常好的编码过程,可以最大限度避免过度设计,但是另一个相反的过程——利用重构去除不必要的预先设计模式,其实我觉得也是很好的,只要看预先设计及后来的重构不是非常困难。

所以过度设计不是非常的可怕,而且在一定范围、尺寸内存在也是经常会出现,而且我感觉也是值得鼓励的
19 楼 jamesby 2007-03-28  
如果是学习阶段无论怎么过渡设计我觉得都不过分,
反而越过渡学习到的东西越多,
就像开始学习武功总是先学习这个拳法,那门功夫,等学习多了,
某天忽然发现原来这些东西外形各异却有着相似的东西,
于是传说中的无招胜有招出现了。
18 楼 xly_971223 2007-03-28  
重构和设计模式怕的就是为了重构而重构 为了模式而模式
凡事太刻意了 就会偏离了方向
我的体会是从TDD到重构,然后从重构中发现模式
直接用模式可能会出现过度设计等问题
17 楼 newbin 2007-03-26  
我最近找了本电子版的也在看,看了前三章,虽然我刚开始写代码,不过这本书感觉的确很经典
16 楼 qinysong 2007-03-26  
在《重构》中,Martin Fowler按照重构所针对的代码内容进行了分类,包括对函数的重构、对对象特性的重构、对数据组织的重构、对条件表达式的重构以及对类层次的重构,并按照这种分类组织了章节。

除了按照重构所针对的代码内容进行分类外,按照采用手法进行分类,我觉得也可以从另一个角度帮助我们更进一步理解重构的进行方式。

通过整理,按照采用手法分类如下:

1、提炼
就是对某个过程的一部分,或某个事物的一部分进行抽象并概念化,以减小所表达的目的(要做什么)和实现(做什么,如何做)之间的语义差距。

运用提炼的重构手法包括
Extract Method、
Split Temporary Variable、
Extract Class、
Extract Subclass、
Extract Superclass、
Extract Interface等

2、内联
就是用其直接实现替换原来的间接调用,通过内联可以去掉意义不大的间接性。

运用内联的重构手法包括
Inline Method、
Inline Temp、
Inline Class

3、移动
在类之间(包括父类和子类之间)移动属性和方法,以使类之间职责更明确更清晰。

运用移动的重构手法包括
Move Method、
Move Field、
Pull Up Field、
Pull Up Method、
Pull Up Constructor Body、
Push Down Method、
Push Down Field

4、替换
将一种实现方式用另一种实现方式替代,以便于更直接更集中和更灵活

运用替换的重构手法包括
Replace Temp with Query、
Replace Method with Method Object、
Replace Date Value with Object、
Replace Array with Object、
Replace Magic Number with Symbolic Constant、
Replace Record with Data Class、
Replace Type Code with Class、
Replace Type Code with Subclasses、
Replace Type Code with State/Strategy、
Replace Subclass with Fields、
Replace Nested Conditional with Guard Clauses、
Replace Conditional with Polymorphism、
Replace Paramether with Explicit Methods、
Replace Parameter with Method、
Replace Constructor with Factory Method、
Replace Error Code with Exception、
Replace Exception with Test、
Replace Inheritance with Delegation、
Replace Delegation with Inheritance

5、改变
改变和替换语义上有些类似,其间的差别还不是很清楚

运用改变的重构手法包括
Change Value to Reference,
Change Reference to Value,
Change Unidirectional Association to Biderectional
Change Biderectional Association to Unidirectional

6、其他
包括增加Add、移除Remove、隐藏Hide、引入Introduce、封装Encapsulate、合并Consolidate等等
15 楼 jamesby 2007-03-26  
这个帖是发在新手区域的,怎么跑到这里来了?
我觉得这个是评论高手还是低手的一个主要因素。
如果融会贯通应该是架构师级别的吧!
14 楼 cozone_柯中 2007-03-26  
书到是有,只是没时间读.
13 楼 fujohnwang 2007-03-26  
无化无极,太极...
12 楼 qinysong 2007-03-26  
刑天战士 写道
错错错,大大们不谈Design Pattern,是因为Design Pattern已经融汇贯通在他们脑子里了,他们可以随意YY模式,so~~~~

对对对,是“融汇贯通在他们脑子里”,而不是从他们的脑子里忘掉
11 楼 jianfeng008cn 2007-03-26  
刑天战士 写道
错错错,大大们不谈Design Pattern,是因为Design Pattern已经融汇贯通在他们脑子里了,他们可以随意YY模式,so~~~~


大大们不用谈论了,不表示所有人该不谈了,反而该多谈谈,好让大大们给些指点:)
10 楼 刑天战士 2007-03-26  
错错错,大大们不谈Design Pattern,是因为Design Pattern已经融汇贯通在他们脑子里了,他们可以随意YY模式,so~~~~
9 楼 andyandyandy 2007-03-26  
楼上说得很有道理
8 楼 qinysong 2007-03-26  
而且我觉得现在有一种现象,当然这种现象只是从我身边来看,可能不完全具有代表性,就是现在的开发人员不像几年前那样对于设计具有那样大的热情,起码热情的普遍性很差。

那些大佬们,象Robbin,cookoo,buaawhl以及老庄等等可以现在不谈论设计,不谈论模式,但是这不是说他们以前没谈论(反而是谈论的太多了,谈的没感觉了,即到了无的境界了),更不能说明现在不需要谈论

可能这有几方面的原因:
1)敏捷方法的突起,一方面要求简化设计,另一方面重构可以帮我们容易的改变设计;
2)框架(Struts,webwork,spring,hibernate)的日益丰富,使的在一般需求下,只按照框架规定的模式就可以顺利进行开发
7 楼 qinysong 2007-03-26  
刑天战士 写道
说句实在话,设计原则,设计模式,重构的终极思想,就是要忘掉这些模式,譬如张无忌学太极剑,忘光了就是学会了。死啃书本,不在项目中领会这些知识,等于没学,甚至等于邯郸学步。

呵呵,我觉得终极思想不是忘掉这些模式,而是通过实践的磨炼,经验的积累,达到对设计理念的心领神会,对设计决策的信手拈来,以无招应有招,而这里的无是心领神会,随心所欲的无,而不是忘光的无

这其中最大的差别是忘光的无,是可以在一知半解的时候就可以忘光的,而随心所欲的无,是需要对招数达到一定熟练程度,对更好层次的理念达到融会贯通之后才能做到的
6 楼 andyandyandy 2007-03-26  
自从看了重构这本书后,逐渐的在项目开发当中应用,确实改善了程序的阅读性,结构性,优化性等,感觉很有用,虽然有些东西还没有理解的特别深刻
5 楼 刑天战士 2007-03-26  
说句实在话,设计原则,设计模式,重构的终极思想,就是要忘掉这些模式,譬如张无忌学太极剑,忘光了就是学会了。死啃书本,不在项目中领会这些知识,等于没学,甚至等于邯郸学步。
4 楼 feygo 2007-03-26  
Bad smells一章 可以当作程序员的自我修养来读

相关推荐

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

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

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

    马丁·福勒的《重构-改善既有代码的设计》作为一本经典之作,深入浅出地介绍了重构的原理、技术和实践案例,为程序员提供了一份宝贵的指南。 《重构-改善既有代码的设计》是软件工程领域中的一本重要书籍,尤其在C/...

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

    《重构-改善既有代码的设计》是一本由Martin Fowler所著的经典IT著作,专注于软件开发中的重构实践和技术。这本书深入探讨了如何通过一系列微小而精确的步骤改进代码的设计,提高软件的质量、可读性和可维护性,而...

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

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

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

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

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

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

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

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

    如何改善代码的设计-读《重构》读书笔记.pdf

    《重构:改善既有代码的设计》是一本深入探讨代码优化和设计改进的经典著作。书中的核心观点是,在不改变软件外部行为的前提下,通过一系列微小的步骤改善代码的结构,从而提高代码的可读性和可维护性。以下是根据书...

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

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

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

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

    《代码整洁之道》读书笔记

    同时,可以配合其他编程实践书籍如《重构:改善既有代码的设计》和《设计模式:可复用面向对象软件的基础》一同学习,以获得更全面的视角。 3. 要整洁的代码 整洁的代码应该易于理解,遵循一定的格式规范,有明确...

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

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

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

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

    leetcode安卓-Note:学习笔记

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

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

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

    java2018面试宝典

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

    计算机基础1

    本文将深入探讨这一主题下的四本重要书籍:《编程珠玑》、《编码:隐匿在计算机软硬件背后的语言》、《程序员思维修炼》以及《改善既有代码的设计》。 首先,《编程珠玑》是一本深受欢迎的编程书籍,作者Jon ...

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

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

Global site tag (gtag.js) - Google Analytics