`

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

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

35 楼 airu 2009-04-24  
fish4j 写道
好多公司都不给时间重构,项目完成就抓紧上线验收收尾款了

有钱赚了还重构?
某些东西本来就没有重构的价值。项目完了,就死了。

34 楼 抛出异常的爱 2009-04-24  
hatedance 写道
楼主想说的估计是不能对采用SSH框架进行重构,比如不能中途换掉hibernate,升级hibernate,甚至换掉java用ruby。系统技术架构一般是不改的!
要改的就是业务逻辑。表改了,dao,service,action,jsp就一路顺着重构吧...

一般是页面改了.....jsp,action,bean,service,dao,xml ,建表语句 一起改....客户想改表的还没见过.
33 楼 hatedance 2009-04-24  
楼主想说的估计是不能对采用SSH框架进行重构,比如不能中途换掉hibernate,升级hibernate,甚至换掉java用ruby。系统技术架构一般是不改的!
要改的就是业务逻辑。表改了,dao,service,action,jsp就一路顺着重构吧...
32 楼 抛出异常的爱 2009-04-23  
碧血剑 写道
对于公司来说,最终的产品是王道。至于重构对于公司来说,适当的时候适当采用。但是还是认为重构是一件很有意义的事情。

对于公司来说改bug不给足够的时间才素王道.
重构也只不过是为了以后改bug时少加点班


31 楼 碧血剑 2009-04-23  
对于公司来说,最终的产品是王道。至于重构对于公司来说,适当的时候适当采用。但是还是认为重构是一件很有意义的事情。
30 楼 抛出异常的爱 2009-04-23  
fish4j 写道
好多公司都不给时间重构,项目完成就抓紧上线验收收尾款了

更多的公司在变更时也不给你时间改bug
两害取其轻.....

个人签名: 作孽总需还.
29 楼 mazzystar 2009-04-23  
logicgate 写道
重构是一种乐趣,就像把一个杂乱无章的房间收拾得井井有条一样,看着都是一种享受。如果你不能把写程序当成一种艺术来看,你就体会不到这种乐趣。


同感
28 楼 mazzystar 2009-04-23  
treblesoftware 写道
各各模块之间相对独立,没有父类,子类。最多只是引用一些公共包中的方法(比如:取得当前时间,等等)。在这样的情况下,我感觉使用重构的意义不大,如果为了重构而重构,明显会降低编码的速度和效率。

这种情况下讨论重构有啥意义?如果业务很简单(curd)代码很规范还有人叫你去重构,那你就问他重构什么
27 楼 fish4j 2009-04-23  
好多公司都不给时间重构,项目完成就抓紧上线验收收尾款了
26 楼 logicgate 2009-04-23  
重构是一种乐趣,就像把一个杂乱无章的房间收拾得井井有条一样,看着都是一种享受。如果你不能把写程序当成一种艺术来看,你就体会不到这种乐趣。
25 楼 抛出异常的爱 2009-04-23  
treblesoftware 写道
Saito 写道
  从楼主的帖子中看出. 并没有提到 单元测试. 重构能够得以进行. 就是要有类似于这种测试框架的支持. 要不然. 重构是危险的. 没有保障的.

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

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


支持!不过现在我做的项目都是在开发中变动需求,而需求变动不大,没有麻烦到非要refactory 不可。我只是最近看了refactorying这本书,对当前形式下的开发模式产生了一些疑问。想和大家讨论一下。以决定我是否需要花这个时间去啃这本书。不过就目前来看,是应该好好的啃一啃了。谢谢您的回帖和建议。

一个业务如果写在一个BO的方法中
要对14个变量进行判断,(其中数据库中有的字段占9个)
两次遍历.5百++以上的代码......
.........
这样的业务需求在我作的项目中很多.....

这样的代码如果不重构的话....谁变更谁想死

另重构是指小幅度的改变设计....
你的需求变更后
设计很有可能需要大幅的变化
先把需求作出来
再一点点的变化变量名
抽出,拉入,移动
等操作最后达到以前的设计重组的作用.

减少架构变更的冲击
24 楼 天机老人 2009-04-22  
我觉的代码重构是一件很幸福的事,很多公司还没有机会给你重构呢!

有时候代码写的很难于阅读同是有些东西很多地方用到,我就会想重构。
感觉重构是一种享受,感觉代码在自己手中一下子升华了!

最重要的是你这次写的一写东西抽象的好,下次还可以用,多省力啊,开发效率一下子就高起来了!你们说的重构那本书没看过,不过重构这件事我一直在做!
23 楼 treblesoftware 2009-04-22  
luckaway 写道
被编码是时打断,重构也算是一种编码!!!

重构是是一种技能!

并不是因为重构而重构,重构的目的是为了让软件变的可扩展、可维护!


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

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

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

简单的想:既然这两句定义这么强调“不改变代码外在行为”,那我觉得无论在什么情况下,重构都是可以进行的吧。


怀疑有很大的成分是被“重构”这个词给迷糊了。汉语中“重构”似乎更像一切推倒从来。但是Fowler的解释似乎与此格格不入,呵呵。
21 楼 treblesoftware 2009-04-22  
Saito 写道
  从楼主的帖子中看出. 并没有提到 单元测试. 重构能够得以进行. 就是要有类似于这种测试框架的支持. 要不然. 重构是危险的. 没有保障的.

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

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


支持!不过现在我做的项目都是在开发中变动需求,而需求变动不大,没有麻烦到非要refactory 不可。我只是最近看了refactorying这本书,对当前形式下的开发模式产生了一些疑问。想和大家讨论一下。以决定我是否需要花这个时间去啃这本书。不过就目前来看,是应该好好的啃一啃了。谢谢您的回帖和建议。
20 楼 zzknight 2009-04-22  
重构好痛苦
19 楼 treblesoftware 2009-04-22  
scvptz 写道
treblesoftware 写道

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

看来楼主根本没有理解TDD的思想啊



嘿嘿。小弟不才,项目平时只是自己做的。我本科大三年级~~请拍砖。
平时都是自己一个人做项目,从需求到设计到编码到测试,就跟SPRING一样,一站式的。真没做过TDD,我理解的TDD就是单元测试。
18 楼 treblesoftware 2009-04-22  
chgle 写道
框架定死在了SPRING+STRUTS2+HBIERBATE范围下,并严格按这个模式进行开发,还谈什么重构,剩下的仅仅是按业务修改的问题了,如果你满足于这样的现状,那么重构对于你来说确实是不合适



对!我说的也就是这个意思。重构似乎意义没有单纯的纯代码编程大了。
17 楼 treblesoftware 2009-04-22  
jili 写道
1、没有银弹
2、重构同上



呵呵。这些有名的开源框架似乎也非银弹。您说的这句话到很有道理~

相关推荐

    重构与模式2.pdf

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

    重构与模式(中文版)

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

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

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

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

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

    Android开发教程之重构程序

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

    重构与模式.pdf

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

    架构与重构

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

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

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

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

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

    软件重用-系统重构

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

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

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

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

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

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

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

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

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

    java 重构改善既有代码的设计.pdf

    - 理解设计模式:重构过程中经常需要运用设计模式的知识,合理应用设计模式可以使代码更加灵活和可维护。 - 保持小步修改:每次重构都应该是一次小的修改,快速完成并立即进行测试,这样风险更小。 - 使用重构工具:...

Global site tag (gtag.js) - Google Analytics