`
碧海山城
  • 浏览: 192541 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

也谈重构

阅读更多

谈到“重构”,大家马上就会想到MF的《重构----改善既有代码的设计》。一年多前,我买了这本书,期间断断续续翻过三次,真正算是研读的也就是一次。确实是一本好书,但是在我看来,很多人并没有理解重构的本质。

什么是重构?“本质上说,重构就是 在代码写好之后改进它的设计”。这是书上的原话。你真的理解这句话嘛?

 

重构的时机:在代码写好之后,在我看来到没必要那么严格。

真正的关键意义在于:“改进软件的设计”。

 

 

看个例子,这是在前几天在JE首页的帖子(忘记具体在哪块了):

 

    当我在读MF的《重构》时产生了这样的疑问。它是否适合?
     这里为了减少争议,我说明一些大概的细节。一个系统在SPRING+STRUTS2+HBIERBATE下,在框架的范围内开发。严格的分层,各层之间使用IOC进行解偶,而且,每一个功能,写一个模块。而且,各各模块之间相对独立,没有父类,子类。最多只是引用一些公共包中的方法(比如:取得当前时间,等等)。在这样的情况下,我感觉使用重构的意义不大,如果为了重构而重构,明显会降低编码的速度和效率。因为我在编码时被打断会显的非常不爽,更别说在编码中进行TDD了。 

 

平时大家在写代码的时候肯定会想:这样的代码好不好?有什么可改进的?这个方法是不是该在这个类里?甚至于用什么模式。这种讨论在论坛、群组、同事之间经常会发生。拿上面的例子,他在写模块,写工具类的时候肯定会有这样的思考。但是一想到重构,脑子里便是:一看就是好书,不过看了为什么没感觉?这100多个技巧怎么记得住啊?什么时候可以用哪个技巧啊?

 

 

当你在想着,怎么改进自己代码的时候,是为了什么?改进软件的设计!!!重构又是为了什么?改进软件的设计!!!很多人一翻开《重构》就像进入了一个“空中花园”,那么多的技巧让你感叹,会花很多时间去理解。可是一合上书,马上又进入了另一片天地,“空中花园”离你是那么遥远,高高在上。

 

 

重构”与你平时对软件做的努力并无本质的区别!他们就是同一个东西。

 

 

将“强大神秘的重构”与我们平时私下讨论的“作坊式的小技巧”相提并论,会令很多人感到诧异。昨天“重构”在我眼前还是那么神秘,面对那100多个技巧我还是那么不知所措。怎么今天这家伙把重构说的那么“轻”?现在有很多关于重构的书,《网站重构:应用Web标准进行设计 》、《数据库重构》、《重构与模式》等等等等,如果你看清重构的本质,那么看书的时候就会是一种享受,不然你就会陷入一种又一种重构技巧的噩梦中。

 

 

我想这也是为什么gigix说,看完这本书之后就完全甩开了这本书,是有道理的。JE上关于重构最好的帖子就是:讨论:重构的前提是不是 TDD大家可以去看看,最关键的是要有自己的认识。

分享到:
评论
4 楼 碧海山城 2009-05-27  
事先的设计和重构关系不大,如果乱起八糟还不如重写,没什么必要重构。
3 楼 tifayuki 2009-05-26  
去年年底被迫参与了一个VB.net的CS架构的给人擦屁股的项目,开发进行了一半,没有基本设计,没有详细设计,没有数据库设计,在表现层直接做持久化,这个简直就是垃圾。
我进去就建议说先整理文档,进行MVC分层(算重构吧),不然没办法做,结果就被boss否决了。没办法,硬着头皮上,结果前几天没写一行代码(真的是没有办法写啊),最后被boss以没有责任心,能力不足为由fire了,呵呵。

重构首先要以正确的结构为前提,如果从根就烂了,也就没有重构的必要了。
2 楼 碧海山城 2009-05-19  
很多刚看《重构》的人,都会认为这是高深的学问,很难弄明半,特别是那100多个技巧,根本记不住。

我只是想告诉大家,看了重构以后,要有重构的意识,而不是念着那些技巧,那么你对重构的时机,重构的技巧才会有更深的理解。

如果你把它当成“高深”的学问,和你平时编码完全脱节,反而会照成很多困扰。

我举得那个例子就是最好的证明,很多人看了重构而不知道重构是什么
1 楼 lqql 2009-05-19  
使用框架,分层并不能代替设计.同样的ssh,会写烂代码的人照样写出来的东西让人恶心!

我认为一个程序就是自己的一个作品,是一件艺术品,会注入自己的思想,灵魂!

相关推荐

    软件重构技术(重构介绍、重构原则、代码的坏味道。。。)

    再者,我们谈一谈“代码的坏味道”,这是识别需要重构的线索。常见的代码坏味道包括: 1. **长方法**:如果一个方法执行多个职责,应考虑拆分为多个小方法,每个方法只做一件事。 2. **重复代码**:重复的代码不仅...

    重构思路浅谈(最后一根稻草型时机)

    《重构思路浅谈:最后一根稻草型时机》 重构,是软件开发过程中不可或缺的一环,旨在提升代码质量,改善系统架构,确保系统的可持续性和稳定性。本文将探讨一种特殊的重构时机——“最后一根稻草”型时机,以及重构...

    重构-改善既有代码的设计(中文版)

     A Reality Check(Revisited) 再谈现实的检验   Resources and References for Refactoring 重构的资源和参考文献   Implications Regarding Software Reuse and Technology Transfer 对软件复用与技术传播的...

    重构-改善既有代码的设计+中文版

     A Reality Check(Revisited) 再谈现实的检验   Resources and References for Refactoring 重构的资源和参考文献   Implications Regarding Software Reuse and Technology Transfer 对软件复用与技术传播的...

    架构重构趋势谈

    图1架构师的主战场随着不同产品的推出、不同版本的发布,需要维护的遗留代码越来越多,重构也就在所难免。关于架构重构能力之于软件企业的意义,可用八个字概括:难点、痛点、未来热点。难点。不少软企都有架构重构...

    浅谈SQL重构在铁路工务信息PWMIS软件中的应用.pdf

    在铁路工务信息PWMIS(铁路工程维护信息系统)软件中,SQL重构是一个至关重要的环节,它关乎系统的性能、可维护性和数据处理效率。SQL(Structured Query Language),即结构化查询语言,是用于管理关系数据库的标准...

    浅谈设计模式在Android代码重构中的应用.pdf

    【摘要】本文主要探讨了设计模式在Android应用开发中的重要...综上所述,设计模式在Android代码重构中的应用是提升软件质量和开发效率的有效途径,同时也需要开发者不断提升自身的信息素养,以适应快速变化的技术环境。

    试谈企业业务流程重构.pptx

    然而,这种结构也有其局限性,如多层次的等级制度、多职能部门间的重复劳动和漫长的决策路径,导致了大量等待时间和效率低下。 传统企业的业务流程往往表现为线性的、部门间串联的形式,每个环节依赖前一个环节的...

    从实例谈面向对象编程、工厂模式和重构

    5. 重构:文档最后讨论了重构的重要性。重构不是简单地增加新代码,而是通过调整已有代码的结构来改进设计。在MediaPlayer的例子中,重构帮助我们将具体类实例化的部分从MediaPlayer类中分离出来,增加了代码的灵活...

    浅谈CSS代码重构

    【CSS代码重构】是优化和改进现有CSS代码的过程,旨在提高代码的可读性、可维护性和性能,同时保持原有功能不变。重构的关键在于改善代码结构,使其更符合最佳实践和设计模式,以便团队协作和长期项目的可持续发展。...

    从Kissy Gallery的重构谈JavaScript框架社区建设.pdf

    JavaScript 框架社区建设 - 从 Kissy Gallery 的重构谈起 Kissy 是阿里前端自主开发的 JavaScript 框架,它的生态圈基础建设有些薄弱,社区贡献代码的人寥寥无几。Kissy 的困境几乎是 JavaScript 框架的缩影。国内...

    范怀宇:豌豆荚2.0重构经验谈

    范怀宇提到,豌豆荚改进过程中整体的性能是过不去的瓶颈...因此希望将豌豆荚现有的功能做的更好,所以进行了豌豆荚2.0重构,不改变整个豌豆荚的架构,把代码重新整理,变得更加结构化,从而达到快速增加新功能的效果。

    重构 改善既有代码的设计

     A Reality Check(Revisited) 再谈现实的检验   Resources and References for Refactoring 重构的资源和参考文献   Implications Regarding Software Reuse and Technology Transfer 对软件复用与技术传播的...

    互联网生活的异化与重构——从互联网时代人的生存状态谈起.pdf

    互联网生活的异化与重构——从互联网时代人的生存状态谈起.pdf

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

     A Reality Check(Revisited) 再谈现实的检验   Resources and References for Refactoring 重构的资源和参考文献   Implications Regarding Software Reuse and Technology Transfer 对软件复用与技术传播的...

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

     A Reality Check(Revisited) 再谈现实的检验   Resources and References for Refactoring 重构的资源和参考文献   Implications Regarding Software Reuse and Technology Transfer 对软件复用与技术传播的...

Global site tag (gtag.js) - Google Analytics