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

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

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

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

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

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

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

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

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

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

3、重构和优化,在之前的开发中,优化的意识要比现在(看完《重构》之后)强的多,如果遇到在一个循环中可以做多个事情的时候,决定把每件事情分开放到单独的循环中是要鼓起很大的勇气的,而现在便可以轻松的决定,因为清晰的代码在需要性能优化时有更宽的道路可以选择,并且往往这种决定不会造成真正的性能影响。
分享到:
评论
43 楼 kaguvivian 2007-08-09  
qinysong 写道
而且我觉得现在有一种现象,当然这种现象只是从我身边来看,可能不完全具有代表性,就是现在的开发人员不像几年前那样对于设计具有那样大的热情,起码热情的普遍性很差。

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

可能这有几方面的原因:
1)敏捷方法的突起,一方面要求简化设计,另一方面重构可以帮我们容易的改变设计;
2)框架(Struts,webwork,spring,hibernate)的日益丰富,使的在一般需求下,只按照框架规定的模式就可以顺利进行开发


对于现在初探架构的java朋友来说,感受设计模式的存在恐怕大多是从(Struts,webwork,spring,hibernate)等等的框架开始的,不乏一些对之前SunJavaCenter时期的设计模式一无所知。同意楼主的观点,希望朋友们日后读到架构方面的好书多做些笔记拿出来与大家讨论和分享!
42 楼 xly_971223 2007-07-20  
引用
忘掉设计模式的言论似乎颇有市场,但是你问他每个模式的精髓是什么,却一问三不知。模式的具体招数是如此重要,GOF,bob,Martin都在不同的场合说过dp这本书最重要的是总结了社区中的众多经验。而且模式本身就是形式(不要死板理解这个形式并不是指DP这本书上面的类图和协作图)嘛。
说终极思想是OCP、DRY等等还有情可原,说终极思想就是忘掉XXX,分明是受金庸影响太深了。

规则是用来打破的 但是有个前提 你必须在充分的理解了规则之后才能去打破 同样设计模式也是如此
41 楼 experience 2007-07-20  
qinysong 写道
刑天战士 写道
说句实在话,设计原则,设计模式,重构的终极思想,就是要忘掉这些模式,譬如张无忌学太极剑,忘光了就是学会了。死啃书本,不在项目中领会这些知识,等于没学,甚至等于邯郸学步。

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

这其中最大的差别是忘光的无,是可以在一知半解的时候就可以忘光的,而随心所欲的无,是需要对招数达到一定熟练程度,对更好层次的理念达到融会贯通之后才能做到的

忘掉设计模式的言论似乎颇有市场,但是你问他每个模式的精髓是什么,却一问三不知。模式的具体招数是如此重要,GOF,bob,Martin都在不同的场合说过dp这本书最重要的是总结了社区中的众多经验。而且模式本身就是形式(不要死板理解这个形式并不是指DP这本书上面的类图和协作图)嘛。
说终极思想是OCP、DRY等等还有情可原,说终极思想就是忘掉XXX,分明是受金庸影响太深了。
40 楼 sopestar 2007-07-10  
《重构--改善既有代码的设计》是本好书。值得研究,收藏
39 楼 hyhongyong 2007-04-17  
xly_971223 写道
hyhongyong 写道
看完这本,再看《重构与模式》,会有更深的理解。

《重构与模式》翻译的太烂了 读着太累


呵呵,能读原版的更好。
关键在于体会其中的道理。
38 楼 hbcui1984 2007-04-17  
大家讨论如此热烈,我也好买一本来读读了!
37 楼 qinysong 2007-04-16  
zeng1980 写道
qinysong 写道
lzmhehe 写道
还有一个就是方法的参数不应该过长  可以使用class 代替

比如
public void handle(long userid,String userName)


要写成

public void handle(User user)


这样了解这个接口 是比较好用
并且接口也不用经常修改

但是如果不了解 又 user属性比较多
那么我怎么知道 需要的user 只要 id 和name 这两个属性就可以了

可以通过提高方法名字的表达能力,即这正是 Rename method 重构手法的用武之地

修改函数名称可能会影响系统的多态性吧

不会影响,有这个担心可能是把重载和覆盖的差异混淆了,试想两个子类的多态方法是面对相同的请求进行不同的具体处理的,如果一个类中的方法只需要user中的id,而另一个类中的方法却需要user中的id和name,那么我感觉这是一个重载的场景,而不是覆盖下的多态。
36 楼 zeng1980 2007-04-16  
qinysong 写道
lzmhehe 写道
还有一个就是方法的参数不应该过长  可以使用class 代替

比如
public void handle(long userid,String userName)


要写成

public void handle(User user)


这样了解这个接口 是比较好用
并且接口也不用经常修改

但是如果不了解 又 user属性比较多
那么我怎么知道 需要的user 只要 id 和name 这两个属性就可以了

可以通过提高方法名字的表达能力,即这正是 Rename method 重构手法的用武之地

修改函数名称可能会影响系统的多态性吧
35 楼 qinysong 2007-04-15  
xly_971223 写道
hyhongyong 写道
看完这本,再看《重构与模式》,会有更深的理解。

《重构与模式》翻译的太烂了 读着太累

我也同感,《重构与模式》前面(大概三章吧)感觉很不错,阐述了模式和重构的关系,以及模式的重构导向实现方式,这一思想是我对这本书最大的收获。后面部分我也实在没能耐下心来仔细看了,感觉有些冗赘,不过内容想来应该不错,应该详细而具体的描述了"通过重构趋向、实现和去除模式"个各种案例,找时间希望能按下心来再看

lzmhehe 写道
书中说了一个哑类 也就是只有getter setter 的类
含有bad small
但是我们使用的pojo 不是很多都是这样的么?

这个我和 温柔一刀 想的一样,请参见那篇讨论domain Object的贴子,会有大的收获,这里我的看法是 哑对象和 POJO完全不是一回事

lzmhehe 写道
还有一个就是方法的参数不应该过长  可以使用class 代替

比如
public void handle(long userid,String userName)


要写成

public void handle(User user)


这样了解这个接口 是比较好用
并且接口也不用经常修改

但是如果不了解 又 user属性比较多
那么我怎么知道 需要的user 只要 id 和name 这两个属性就可以了

可以通过提高方法名字的表达能力,即这正是 Rename method 重构手法的用武之地
34 楼 yiqing1982 2007-04-14  
huangpengxiao 写道
中关村图书大厦居然没有此书 需要订购~

不是吧,中关村海淀桥旁的新华书店有的啊,我就是在那边买的。
33 楼 温柔一刀 2007-04-13  
lzmhehe 写道
既然说的这本书
我就问问
书中说了一个哑类 也就是只有getter setter 的类
含有bad small
但是我们使用的pojo 不是很多都是这样的么?


http://www.iteye.com/topic/11712
32 楼 lzmhehe 2007-04-13  
既然说的这本书
我就问问
书中说了一个哑类 也就是只有getter setter 的类
含有bad small
但是我们使用的pojo 不是很多都是这样的么?

还有一个就是方法的参数不应该过长  可以使用class 代替

比如
public void handle(long userid,String userName)


要写成

public void handle(User user)


这样了解这个接口 是比较好用
并且接口也不用经常修改

但是如果不了解 又 user属性比较多
那么我怎么知道 需要的user 只要 id 和name 这两个属性就可以了
31 楼 ricsson 2007-04-12  
这本书粗看过,感觉不错,哪天有空好好研究下.
30 楼 xly_971223 2007-04-10  
hyhongyong 写道
看完这本,再看《重构与模式》,会有更深的理解。

《重构与模式》翻译的太烂了 读着太累
29 楼 realreal2000 2007-04-10  
学习的过程就是提高的过程,看书是对自己认识的总结
28 楼 dovecat 2007-04-10  
sharong 写道
也在看这本书,说老实话,书写的还可以,就是太浅,不够深入,80%的重构方法我还没看这本书前就会了,因为eclipse,idea等IDE已经提供了重构选项,还是不要迷信大师的好。

晕!那是eclipse写得好,让你在使用IDE的时候不知不觉就理解了大师的想法.我个郁闷!感觉有点象教会了徒弟,打师父...
27 楼 hyhongyong 2007-04-10  
看完这本,再看《重构与模式》,会有更深的理解。
26 楼 xly_971223 2007-04-10  
huangpengxiao 写道
中关村图书大厦居然没有此书 需要订购~

中关村图书大厦卖的太贵 我一般上当当买
25 楼 huangpengxiao 2007-04-10  
中关村图书大厦居然没有此书 需要订购~
24 楼 温柔一刀 2007-04-09  
好书我喜欢不停的重复看
这本书我也是没事的时候就喜欢翻翻

相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    leetcode安卓-Note:学习笔记

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

    计算机基础1

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

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

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

    java2018面试宝典

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

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

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

Global site tag (gtag.js) - Google Analytics