`

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

阅读更多
    当我在读MF的《重构》时产生了这样的疑问。它是否适合?
     这里为了减少争议,我说明一些大概的细节。一个系统在SPRING+STRUTS2+HBIERBATE下,在框架的范围内开发。严格的分层,各层之间使用IOC进行解偶,而且,每一个功能,写一个模块。而且,各各模块之间相对独立,没有父类,子类。最多只是引用一些公共包中的方法(比如:取得当前时间,等等)。在这样的情况下,我感觉使用重构的意义不大,如果为了重构而重构,明显会降低编码的速度和效率。因为我在编码时被打断会显的非常不爽,更别说在编码中进行TDD了。
      不知道大家怎么看这个问题。请大家在文章范围内讨论,勿夸出范围,谢谢。
分享到:
评论
56 楼 iaimstar 2009-06-23  
重构
你接手了一个项目,或者模块,看见一堆想杀人的代码,在可预计的时间范围内你将会多次被拖入这个坑
于是重构之,即便不是为了让别人不死,至少自己不能死
55 楼 treblesoftware 2009-06-22  
抛出异常的爱 写道
treblesoftware 写道
    当我在读MF的《重构》时产生了这样的疑问。它是否适合?
     这里为了减少争议,我说明一些大概的细节。一个系统在SPRING+STRUTS2+HBIERBATE下,在框架的范围内开发。严格的分层,各层之间使用IOC进行解偶,而且,每一个功能,写一个模块。而且,各各模块之间相对独立,没有父类,子类。最多只是引用一些公共包中的方法(比如:取得当前时间,等等)。在这样的情况下,我感觉使用重构的意义不大,如果为了重构而重构,明显会降低编码的速度和效率。因为我在编码时被打断会显的非常不爽,更别说在编码中进行TDD了。
      不知道大家怎么看这个问题。请大家在文章范围内讨论,勿夸出范围,谢谢。

我又仔细的看了一次的主贴.......
你说的 一个功能一个模块.....
是公司规定
是不利于重构的规定之一.

当你的代码中有很强大的逻辑关系时
很多很严格的条件约束时
你会发现
你的代码很难修正
所以我常在不维反公司规定的条件下
把尽量重复 的代码 推到对应的 bean
(Entity)中,让这个bean 除了set get 再多些能力
如果是个更公用的方法就推到tools中去
还有大的entity 拆成多个bean 可以更好的减少代码.
还有很多很多方式
并不一定要把重构里所有的条件作到100%
要把你的代码作的更好....
至少要比重构之前好点吧.

读过写过上千行的一个方法后再回来讨论重构会更有意义的多.


谢谢您用心的解答。您的方法有点OO的感觉,跟我说的那种“一个功能一个模块”有些不同,不过您的方法的确是个好方法 谢谢。
54 楼 treblesoftware 2009-06-22  
palmer 写道
我想 重构不是目的, 而是方法。
重构是不可避免的。

重构的前提,是可测试性。
而 重构 这本书,是如何实现"可测试性"。
你不可能 很简单的把一个没有提前考虑可测试性 的项目,变成可以 方便的重构的。 所以本书 从最最 原始的例子开始, 告诉你 如何去实现一个可测试性的项目,有了这个前提, 才有了可重构的项目.


重构 给出的例子 是太简单的例子, 他是说明对于很初级的程序员,也能够很好的运用TDD。我想MF 的意思不是让大家都按照这个顺序来设计项目。   他是例子来说明一个思想。



因此最后总结一下:
重构不是目的, 而是方法。

重构不仅是一个方法, 更重要的是一个思想, 或者说思维方式。





您的总结很好,谢谢了。
53 楼 logicgate 2009-06-22  
抛出异常的爱 写道
读过写过上千行的一个方法后再回来讨论重构会更有意义的多.


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

我又仔细的看了一次的主贴.......
你说的 一个功能一个模块.....
是公司规定
是不利于重构的规定之一.

当你的代码中有很强大的逻辑关系时
很多很严格的条件约束时
你会发现
你的代码很难修正
所以我常在不维反公司规定的条件下
把尽量重复 的代码 推到对应的 bean
(Entity)中,让这个bean 除了set get 再多些能力
如果是个更公用的方法就推到tools中去
还有大的entity 拆成多个bean 可以更好的减少代码.
还有很多很多方式
并不一定要把重构里所有的条件作到100%
要把你的代码作的更好....
至少要比重构之前好点吧.

读过写过上千行的一个方法后再回来讨论重构会更有意义的多.
51 楼 palmer 2009-06-22  
我想 重构不是目的, 而是方法。
重构是不可避免的。

重构的前提,是可测试性。
而 重构 这本书,是如何实现"可测试性"。
你不可能 很简单的把一个没有提前考虑可测试性 的项目,变成可以 方便的重构的。 所以本书 从最最 原始的例子开始, 告诉你 如何去实现一个可测试性的项目,有了这个前提, 才有了可重构的项目.


重构 给出的例子 是太简单的例子, 他是说明对于很初级的程序员,也能够很好的运用TDD。我想MF 的意思不是让大家都按照这个顺序来设计项目。   他是例子来说明一个思想。



因此最后总结一下:
重构不是目的, 而是方法。

重构不仅是一个方法, 更重要的是一个思想, 或者说思维方式。



50 楼 xuzhfa123 2009-06-20  
treblesoftware 写道
luckaway 写道
被编码是时打断,重构也算是一种编码!!!

重构是是一种技能!

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


在框架内,一个功能写一个模块实现,而且分层很严格。突然觉得就算需求变动了,改起来也挺方便。所以才产生了这样的疑问。谢谢您的回帖。

每个功能模块都有DRUP操作,像你说的,这样下去不就有了code smell,如果修改一个地方就全得跟着改,你认为不需要重构吗.不是有了SSH,严格分层了就不需要重构了.
49 楼 treblesoftware 2009-06-19  
murainwood 写道
treblesoftware 写道

murainwood 写道treblesoftware 写道
murainwood 写道风清云淡 写道
无语了,就LZ对重构的认识把我雷到了。哎,又见一个无知者无畏

呵呵,一个不知道啥大学的大三小朋友,能懂个啥?
要理解一下嘛


他没能理解我的意思,你也一样。请仔细读一读我前面写的文章。

扯吧,以为SSH就天下无敌,不要重构了。


我写的很清楚,以SSH2为例子。JAVA里面框架很多,每种情况都不一样,我没谈别的,只谈SSH2,你不要故意转移话题。在SSH2下面,还有不同的编码风格,以及不同的设计风格,这个本来就很容捅,我这里在拿TS开发指导思想来说。我说的重构只是一种大概的思想,《重构》这本书上有许多重构的方法,我的意思是:这些方法并不一定都适用于现在的所有东西,所以我才说,重构是否完全适合现在的开发模式。MF当时写这书的时候,还没有SSH吧?或者SSH没有现在这么流行吧?任何系统当然需要重构。


不说什么了,确实是典型的不知者无畏。



随便你怎么想吧。我也不说了。本身就没什么好说的。累代码,本来就没出路可寻。
48 楼 murainwood 2009-06-19  
treblesoftware 写道

murainwood 写道treblesoftware 写道
murainwood 写道风清云淡 写道
无语了,就LZ对重构的认识把我雷到了。哎,又见一个无知者无畏

呵呵,一个不知道啥大学的大三小朋友,能懂个啥?
要理解一下嘛


他没能理解我的意思,你也一样。请仔细读一读我前面写的文章。

扯吧,以为SSH就天下无敌,不要重构了。


我写的很清楚,以SSH2为例子。JAVA里面框架很多,每种情况都不一样,我没谈别的,只谈SSH2,你不要故意转移话题。在SSH2下面,还有不同的编码风格,以及不同的设计风格,这个本来就很容捅,我这里在拿TS开发指导思想来说。我说的重构只是一种大概的思想,《重构》这本书上有许多重构的方法,我的意思是:这些方法并不一定都适用于现在的所有东西,所以我才说,重构是否完全适合现在的开发模式。MF当时写这书的时候,还没有SSH吧?或者SSH没有现在这么流行吧?任何系统当然需要重构。


不说什么了,确实是典型的不知者无畏。
47 楼 treblesoftware 2009-06-19  
murainwood 写道
treblesoftware 写道

murainwood 写道风清云淡 写道
无语了,就LZ对重构的认识把我雷到了。哎,又见一个无知者无畏

呵呵,一个不知道啥大学的大三小朋友,能懂个啥?
要理解一下嘛


他没能理解我的意思,你也一样。请仔细读一读我前面写的文章。

扯吧,以为SSH就天下无敌,不要重构了。


我写的很清楚,以SSH2为例子。JAVA里面框架很多,每种情况都不一样,我没谈别的,只谈SSH2,你不要故意转移话题。在SSH2下面,还有不同的编码风格,以及不同的设计风格,这个本来就很容捅,我这里在拿TS开发指导思想来说。我说的重构只是一种大概的思想,《重构》这本书上有许多重构的方法,我的意思是:这些方法并不一定都适用于现在的所有东西,所以我才说,重构是否完全适合现在的开发模式。MF当时写这书的时候,还没有SSH吧?或者SSH没有现在这么流行吧?任何系统当然需要重构。
46 楼 murainwood 2009-06-19  
treblesoftware 写道

murainwood 写道风清云淡 写道
无语了,就LZ对重构的认识把我雷到了。哎,又见一个无知者无畏

呵呵,一个不知道啥大学的大三小朋友,能懂个啥?
要理解一下嘛


他没能理解我的意思,你也一样。请仔细读一读我前面写的文章。

扯吧,以为SSH就天下无敌,不要重构了。
45 楼 treblesoftware 2009-06-19  
风清云淡 写道
无语了,就LZ对重构的认识把我雷到了。
哎,又见一个无知者无畏


请好好的读一读我之前写的文章,你没有能理解我的意思。
44 楼 treblesoftware 2009-06-19  
murainwood 写道
风清云淡 写道

无语了,就LZ对重构的认识把我雷到了。哎,又见一个无知者无畏

呵呵,一个不知道啥大学的大三小朋友,能懂个啥?
要理解一下嘛



他没能理解我的意思,你也一样。请仔细读一读我前面写的文章。
43 楼 murainwood 2009-06-19  
风清云淡 写道

无语了,就LZ对重构的认识把我雷到了。哎,又见一个无知者无畏

呵呵,一个不知道啥大学的大三小朋友,能懂个啥?
要理解一下嘛
42 楼 风清云淡 2009-06-19  
无语了,就LZ对重构的认识把我雷到了。
哎,又见一个无知者无畏
41 楼 ywbanm 2009-05-05  
重构不应该是一个单独来做的事情,
重构应该存在于你写下每一行代码时。

整洁不在于打扫而在于保持。
40 楼 matt.u 2009-04-28  
logicgate 写道
重构是一种乐趣,就像把一个杂乱无章的房间收拾得井井有条一样,看着都是一种享受。如果你不能把写程序当成一种艺术来看,你就体会不到这种乐趣。

同感!我也是把编程当成一种艺术,每当设计完一些模块时,都会感觉一种很有成就的感觉。呵呵,有点自以为是。
当然不是所有项目都能让我们把他当艺术那么追求完美地来实现。

我一直认为如果一个项目不适时的进行重构,那这个项目是会慢慢失去其生命力的。一个到处都是bad smell的项目,还有谁愿意去维护,还有谁愿意去精益求精的把他做好呢?(当然如果是交了货就收钱,而且不用修改不用维护的话。我也可以做到功能第一、实现第二。)

重构不会因为你使用了任何框架就不需要了,难道你的业务实现就只得几行;你的业务需求就不会有变化;你的代码质量或者逻辑就完美无缺?

39 楼 pipilu 2009-04-26  
kiol 写道
这个问题好奇怪啊,难道楼主一开始就能把代码写完美?
还是认为只有架构的改变才是重构?


我也觉得很奇怪,而且并不是只有业务有变化了才有重构。哪怕需求从来就没变过,代码从无到有的过程也穿插着很多的重构。除非谁的开发过程是:先深思熟虑,然后一气呵成。
38 楼 treblesoftware 2009-04-24  
weid0907 写道
总有人提出架构的新思想。
开发的时候,由一个不通用的类发展为可复用了,开始只是设计了一个具体类,而后来需要设计为接口;一段代码在初期直接写在对象内,后来随着业务的扩展,发现这个功能可以被多个模块共用,于是新建一个对象单独封装了这个类;一组类结构不合理,依据设计模式原理进行修改,便于维护。。。这些都需要重构来完成,而与你所用的框架无关。甚至说,在精通框架的基础下,进行自编写框架功能,使得代码减少对框架的依赖,那么你的产品又会更便于迁移,这也需要重构。

重构现象是客观存在的,除非你刻意不去做,否则你必然会用到重构。



对!您的回复到是说到点子上了。谢谢!
37 楼 weid0907 2009-04-24  
总有人提出架构的新思想。
开发的时候,由一个不通用的类发展为可复用了,开始只是设计了一个具体类,而后来需要设计为接口;一段代码在初期直接写在对象内,后来随着业务的扩展,发现这个功能可以被多个模块共用,于是新建一个对象单独封装了这个类;一组类结构不合理,依据设计模式原理进行修改,便于维护。。。这些都需要重构来完成,而与你所用的框架无关。甚至说,在精通框架的基础下,进行自编写框架功能,使得代码减少对框架的依赖,那么你的产品又会更便于迁移,这也需要重构。

重构现象是客观存在的,除非你刻意不去做,否则你必然会用到重构。

相关推荐

    重构与模式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