`

重构,是否适合“当前”开发模式?

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

重构是在以不改变代码外在行为为前提的情况下,改善代码的内部结构。

好吧,我特意翻了一下重构这本书,Fowler说:
page i
重构一词非常清楚地说明了它自身的意义和价值:在不破坏可察功能的前提下,借由搬移、提炼、打散、凝聚…,改善事物的体质。
page xvi
所谓重构是这样一个过程:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。

简单的想:既然这两句定义这么强调“不改变代码外在行为”,那我觉得无论在什么情况下,重构都是可以进行的吧。
15 楼 baseworld 2009-04-22  
不重构只有死
14 楼 lichuan 2009-04-22  
扎实编码,偷懒不好
13 楼 whaosoft 2009-04-22  
不好意思 其实我感觉你说的不对呢~@
12 楼 抛出异常的爱 2009-04-22  
chgle 写道
抛出异常的爱 写道
chgle 写道
框架定死在了SPRING+STRUTS2+HBIERBATE范围下,并严格按这个模式进行开发,还谈什么重构,剩下的仅仅是按业务修改的问题了,如果你满足于这样的现状,那么重构对于你来说确实是不合适

业务很简单么
业务不变化么
业务就不是代码组成的么

重构能重构的
把不能重构放在一边

重构=修改代码?说了是严格按SPRING+STRUTS2+HBIERBATE这个模式进行开发,但是往往复杂的系统会有自己额外的一些辅助框架和组件,或者是在SSH框架下进行扩展,这时在具体业务改变的时候重构的意义就体现出来了

重构是为了下回看到代码时不要捏着鼻子看.

另严格的瀑布式开发根本没有重构的必要性.
11 楼 Saito 2009-04-22  
Julien 写道
没干过活的人死也不相信需求会变


     之前没干过活.. 结果接了个私活 ..没把我搞死..

              算了. 以后还是洁身自好吧..不趟这趟浑水了..
10 楼 Saito 2009-04-22  
  从楼主的帖子中看出. 并没有提到 单元测试. 重构能够得以进行. 就是要有类似于这种测试框架的支持. 要不然. 重构是危险的. 没有保障的.

  当然. 更进一步的来说. 我们应该用TDD 来进行开发.并随时重构自己的程序. SSH为什么会那么能受大众喜欢. 有一个原因就是 他们易于测试. 这就易于重构我们的业务逻辑. 让我们的逻辑更加清晰. 更容易复用. 即使转手自己的工作. 别人也能只读我们的单元测试框架内的测试代码. 就能知道我们在做什么.  说白了. 我觉得我们是在挖井. 现在挖的过程是痛苦的. 等到一天业务发生改变. 就是你吃水的时候了.  

  有时候这样想. TDD + 重构有时候确实很难在公司. 企业内实行. 我觉得有一个原因就是我们程序员都有点急功近利. 说白了就是浮躁.( 当然包括我.) 觉得重构代码是件浪费时间的事. ( 这也包括我.) .就跟我们编码很少去想到 防御式编程是一样的. bug多多.唯完成功能是论. (这说的就是我.) .kent beck .martin fowler这种大师都在他的工具箱里有 重构 有 Junit . 我觉得我们更该有.. 再说了. 重构是需要经验的.不是看refactory就能学会的.  现在不去做. 什么时候去做? 趁现在还在学校. 把 TDD +refactory 装进自己的工具箱吧..   当然 我是准备这么做了..
9 楼 Julien 2009-04-22  
没干过活的人死也不相信需求会变
8 楼 scvptz 2009-04-22  
treblesoftware 写道

     因为我在编码时被打断会显的非常不爽,更别说在编码中进行TDD了。

看来楼主根本没有理解TDD的思想啊
7 楼 chgle 2009-04-22  
抛出异常的爱 写道
chgle 写道
框架定死在了SPRING+STRUTS2+HBIERBATE范围下,并严格按这个模式进行开发,还谈什么重构,剩下的仅仅是按业务修改的问题了,如果你满足于这样的现状,那么重构对于你来说确实是不合适

业务很简单么
业务不变化么
业务就不是代码组成的么

重构能重构的
把不能重构放在一边

重构=修改代码?说了是严格按SPRING+STRUTS2+HBIERBATE这个模式进行开发,但是往往复杂的系统会有自己额外的一些辅助框架和组件,或者是在SSH框架下进行扩展,这时在具体业务改变的时候重构的意义就体现出来了
6 楼 抛出异常的爱 2009-04-22  
chgle 写道
框架定死在了SPRING+STRUTS2+HBIERBATE范围下,并严格按这个模式进行开发,还谈什么重构,剩下的仅仅是按业务修改的问题了,如果你满足于这样的现状,那么重构对于你来说确实是不合适

业务很简单么
业务不变化么
业务就不是代码组成的么

重构能重构的
把不能重构放在一边
5 楼 chgle 2009-04-22  
框架定死在了SPRING+STRUTS2+HBIERBATE范围下,并严格按这个模式进行开发,还谈什么重构,剩下的仅仅是按业务修改的问题了,如果你满足于这样的现状,那么重构对于你来说确实是不合适
4 楼 jili 2009-04-22  
1、没有银弹
2、重构同上
3 楼 luckaway 2009-04-22  
被编码是时打断,重构也算是一种编码!!!

重构是是一种技能!

并不是因为重构而重构,重构的目的是为了让软件变的可扩展、可维护!
2 楼 treblesoftware 2009-04-22  
zorwi 写道
即使开始时需求考虑多么周全,也无法避免出现需求的改变.即使开始时设计的多么周到,也会有无法适应需求的情况。

当需求出现变化的时候,此时就要更改代码,更改代码的时候,如果出现bad smell,此时就需要重构.重构的目的,并不是为了实现某个需求,而是为了适应某种需求的变化.在敏捷开发中,都是遵循用"最简单的方法完成工作".所以,重构成了敏捷开发中必不可少的一部分.

至于TDD,我的愚见就是应该Test first 测试先行.在编码前就先写好测试代码,部分人会认为功能都没出来,怎么写测试?打个比方,砌墙时,你看师傅是先把墙砌好,在用线量量看平不平,还是先用条线拉直,然后砌墙是就以这条线为标准来砌呢?答案显然。而且先写测试,你会先用到该功能,可以说是一种体会,会对你之后写的功能有了更好的灵感。还有,重构后的代码,还可以用TDD测试,其实TDD,也是为日后的维护减少工作量。



感觉您没有完全理解我的意思。 不过还是非常感谢您的回帖。
关于《重构》,我指说这本书是否适合我们现在的这种开发模式(什么开发模式,请看我的帖子顶楼)。
其实我到认为,重构更适合从什么都没有到什么都有。就像您说的,不断变化中,寻找机遇。不过问题就是,我们现在都在框架的范围之内,借助框架的一些思想去实现代码,感觉重构里的许多东西并不十分适合当前的模式。
1 楼 zorwi 2009-04-22  
即使开始时需求考虑多么周全,也无法避免出现需求的改变.即使开始时设计的多么周到,也会有无法适应需求的情况。

当需求出现变化的时候,此时就要更改代码,更改代码的时候,如果出现bad smell,此时就需要重构.重构的目的,并不是为了实现某个需求,而是为了适应某种需求的变化.在敏捷开发中,都是遵循用"最简单的方法完成工作".所以,重构成了敏捷开发中必不可少的一部分.

至于TDD,我的愚见就是应该Test first 测试先行.在编码前就先写好测试代码,部分人会认为功能都没出来,怎么写测试?打个比方,砌墙时,你看师傅是先把墙砌好,在用线量量看平不平,还是先用条线拉直,然后砌墙是就以这条线为标准来砌呢?答案显然。而且先写测试,你会先用到该功能,可以说是一种体会,会对你之后写的功能有了更好的灵感。还有,重构后的代码,还可以用TDD测试,其实TDD,也是为日后的维护减少工作量。

相关推荐

    重构与模式2.pdf

    - **实战案例分析**:书中提供了多个来自真实项目的示例代码,这些案例有助于读者理解如何在实际开发中应用模式导向重构的概念和技术。 - **模式与重构的联系**:书中深入讨论了模式和重构之间的联系,包括如何利用...

    重构与模式(中文版)

    本文档主要围绕“重构与模式”这一主题展开,重点介绍了在软件开发过程中如何利用设计模式进行代码重构,以提高代码的质量、可读性和可维护性。文章通过具体实例探讨了设计模式的应用,并深入分析了重构过程中的关键...

    使用设计模式重构代码.pdf

    关键在于理解设计模式背后的意图和动机,这些深层次的思考可以帮助开发者找到最适合当前问题的模式。 以错误处理为例,作者提出一个简化的情境:分布式网管系统中,当数据库访问或通信发生错误时,需要通过用户界面...

    20210513-中金公司-房地产行业房企商业模式与估值水平的国际比较:模式突围与估值重构.pdf

    文档中提到了四种国际典型房企商业模式:住宅建筑商模式、租售双轮驱动模式、资产管理人模式、集团综合开发模式。每种模式根据其特点具有不同的估值水平,这为中国房企提供了模式突围和价值重估的参考。 四、中国房...

    Android开发教程之重构程序

    ### Android开发教程之重构程序 #### 什么是重构 重构是一种改进已有软件的设计而又不改变其功能的行为。在软件开发过程中,重构是优化代码结构、提高可读性和可维护性的重要手段之一。对于Android开发而言,重构...

    重构与模式.pdf

    在重构的过程中,可能会发现某些设计模式更适合当前的问题场景;反之,在应用设计模式时,也经常需要对现有代码进行重构,以更好地适应新的设计模式。两者共同促进了代码质量和结构的持续改进。 综上所述,“重构与...

    架构与重构

    随着云计算、大数据、人工智能等新技术的应用,以及DevOps、敏捷开发等新模式的普及,软件系统的复杂性不断增加,这要求开发团队具备更强的重构能力。例如: - **对组件的重用与重构**:通过有效的组件管理和重构...

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

    作者提倡编写意图明显、易于理解的代码,这不仅对当前的开发团队有利,也能方便未来的维护者。 最后,重构是一个持续的过程,它与软件开发的其他阶段紧密相连,如需求分析、设计、编码和测试。通过不断地重构,我们...

    XUNIT测试模式--测试码重构(英文版)

    ### XUNIT测试模式--测试码重构 #### 一、引言与背景介绍 《XUNIT测试模式--测试码重构》是一本在2008年荣获Jolt Award技术图书类生产力大奖的重要著作。该书由Gerard Meszaros撰写,他是ClearStream Consulting...

    软件重用-系统重构

    同时,团队可以考虑是否有其他已存在的、更适合当前场景的重用资源可以替换原有的设计。 总结来说,软件重用和系统重构都是为了优化软件开发过程,提升软件质量和效率。正确地结合两者,可以打造出更加健壮、易于...

    重构 改善既有代码的设计 中文高清完整版pdf

    2. **常见重构模式**: - **简化函数**:通过提取函数、分解条件语句等方式简化复杂的函数。 - **改名**:为变量、函数等命名更具有描述性的名称,提高代码的可读性。 - **移动函数或类**:将函数或类从一个位置...

    重构:改善既有代码的设计.pdf 带目录清晰版

    - **功能添加前**:在添加新功能之前,如果发现当前代码结构存在不合理的地方,应该先进行重构再添加新功能。 - **测试失败后**:修复bug之后,往往需要对相关代码进行审查,以确保类似问题不再出现。 - **性能瓶颈...

    重构:改善既有代码的设计(中英文)

    通过重构,开发者可以逐渐发现并实施适合当前需求的设计模式,从而提升软件设计的质量。 此外,重构也是团队协作中的一个重要工具。当团队成员共同对代码进行重构时,他们可以更好地理解彼此的设计思路,使代码更加...

    敏捷软件开发:原则、模式与实践.pdf

    讲解的重点在如何在实际的应用中去使用模式,如何根据当前问题的上下文以及约束力去选择最适合的模式,以及何时避免使用模式。  ●UML:本书不是关于 UML 的,但是为了让读者更好的理解书中的内容,作者使用了一些...

    Java游戏开发之推箱子重构版.rar

    在本文中,我们将深入探讨Java游戏开发,特别是以“推箱子”重构版为例,这是一个经典的逻辑益智游戏,深受程序员和游戏玩家的喜爱。我们将讨论如何使用Java语言和相关的开发工具来设计和实现这样的游戏。 首先,...

    一本代码重构的书让代码更简洁

    这不仅有利于当前的开发工作,还能为未来的维护和扩展打下坚实基础。 代码设计是软件开发中的关键环节,良好的设计可以使代码更具层次感。在Java中,我们可以运用设计模式,如工厂模式、单例模式、观察者模式等,来...

Global site tag (gtag.js) - Google Analytics