`
zyx322
  • 浏览: 4305 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

重写与重构

 
阅读更多

重构不等于重写

上周公司内部开发部交流会上,一些同事就自己的工作情况提到了一些关于重构的内容,大家就重构内容进行了简单的讨论,一些同事提到了重构的原因,实现的功能不好、效率较差等。在现实工作中,“重构”更多被用来成为弥补缺陷、增加功能、修改设计等工作,而很多人潜意识里也认为重构就是修改、重写代码,而这往往曲解了重构的本意。重构是一个过程,是建立在不违背外在行为的前提下,对代码进行修改,改进程序的内部结构。重构不等于重新设计,软件工程里一定要先进行设计,再进行编码,而如果你在之后对设计进行了改变,那只能说明当初的设计不够合理或不够完善。

为什么要重构?列下本人认为可能会导致重构的原因

  1. 代码重复,首当其冲。个人认为,重复是一大忌,而增大软件的复用程度也是程序设计的主要目标。如两个函数用到了同样的表达式,那么就应该考虑抽取一个公共的表达式函数,如果不同的类用了出现了重复代码,那么就应该考虑提取公共的类。
  2. 不符合代码规范。代码规范应该在前期编码时尽量避免,但谁也不能保证自己的代码没有任何规范上的问题,而事实上,因为不符合编码规范而进行重构的占相当一部分,如子程序过长,嵌套过深,命名较差,使用全局变量,没有良好地使用注释,函数参数过多等。
  3. 类的内聚性太差,类之间的耦合性过大。如果一个单一的class做了许多彼此无关的事,那么就不可避免的出现太多的instance常量,代码重复也会接踵而至。通常情况下,这些类应该被拆分提取为多个类,每个类负责一且内在的任务。
  4. 类的接口定义不够完善,不够一致。接口即服务,如果一个接口没有定义得很好的话,往往体现了业务逻辑关系没有抽象好,导致未能提供层次一致的抽象。有些程序员常常一怒之下将类大改,这常常导致违背了最初的契约,此时类的接口会变得异常可怕。而类的耦合过大往往导致修改一个类时,要改相应的很多类,这时类的代码就当被重新组织。代码的重用很重要,工作量的重用也很重要,应该尽量避免同样的工作进行多次。
  5. 代码的安全性和健壮性较差。如数据成员被置为公用,没有提供数据库的安全访问方式,没有实例化对象就调用对像的属性等,这些不安全的代码常常是程序隐患,代码安全性的问题追踪往往是较为困难的,特别是在软件发布之后,羽开发之初应该尽量避免,个人认为一个较好的办法就是加强开发者测试。
  6. 代码实现晦涩,不易维护。代码是写给人看的,而不是写给机器看的。不要为拙劣的代码写注释编文档,应该重写代码。
  7. case或switch语句,需要相同的修改,对case语句的修改常常导致对类似的一组case语句做出相同的修改,此时应该考虑是否用继承更为妥当。

总之,应该明确一个观点,持续重构,避免重写,重新设计和重写不能成为重构的代言词。

 

出自:http://www.cnblogs.com/doctorking/articles/1748100.html

 

 

从项目管理方面来看,导致需要重构或重写的原因:

 

  • 越来越多的特性。它会导致复杂度的提升。
  • 捷径和权宜之道。为了支持诸如”我们在八月份需要这个NB的搜索,没二话”之类的特性
  • 开发者轮换。新的开发者根本不知道架构之后的所有起决定性作用的决定和主意。知识不可避免地随着人员的轮换而流失。
  • 开发团队的扩大。更多的人导致更少的交流,更少的交流产生糟糕的决定。
分享到:
JSP
评论

相关推荐

    重载、重写、重构.md

    总结来说,重载、重构和重写是C#中非常重要的概念,它们分别涉及方法的命名、代码结构的优化以及继承关系中的方法实现。掌握这些概念有助于编写更高质量的代码,并能够更好地应对未来的需求变化。

    TabContraol重构-vb2010重写TabControl控件的使用TabControl竖向显示.rar

    针对这个需求,"TabContraol重构-vb2010重写TabControl控件的使用TabControl竖向显示.rar"压缩包提供了三种不同的方法来实现这一功能。 1. **方法一:自定义控件绘制** 这种方法涉及重写`TabControl`的绘制逻辑。...

    C#重写MessageBox对话框

    C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框C#重写MessageBox对话框

    C++ Primer第四版PDF

    - **重写与重构**: 为了体现现代C++编程风格,本书进行了彻底的重写与重组,减少了对底层编程技术的强调,转而更重视标准库的使用。 - **教学方法改进**: - 每章新增“小结”和“术语”,帮助读者巩固所学内容。 -...

    重构 改善既有代码的设计 pdf 中文

    Martin Fowler所著的《重构:改善既有代码的设计》是一本深入探讨重构技术的经典著作,它与《设计模式》齐名,为软件开发人员提供了超过70种行之有效的重构方法。本书的目标是教会读者如何识别代码中需要重构的部分...

    软件优化与重构(ppt,入门版)

    重构与设计模式相结合,可以帮助我们实施更有效率的重构策略。不过,过度依赖预定义的模式可能会限制创新,重构的关键在于灵活适应实际情况,运用适当的思想和方法。时刻保持重构意识,即使在编写代码时,也要考虑...

    精品--本人精品课程毕业设计的重构,使用springboot框架重写.zip

    【描述】:“精品--本人精品课程毕业设计的重构,使用springboot框架重写”进一步强调,这个项目是对原有毕业设计的优化与改进,采用Spring Boot进行重写。重构通常是为了提高代码质量、可读性和维护性,同时也可能...

    我经历的重构

    - **大重构**:指对项目进行大规模的重构,可能涉及整个模块的重写、架构的替换甚至是编程语言的变更。 - **案例分析**:以Zope2到Zope3的迁移为例,探讨了为何进行大重构以及其过程中遇到的问题。 - **背景**:...

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

    - 重构与重写的区别 - 何时进行重构 2. **重构的基本原则** - 代码可读性 - 减少重复代码 - 提高模块化 3. **常见的重构技巧** - 提取方法(Extract Method) - 移动功能(Move Function) - 替换算法...

    重构_改善既有代码的设计-中文完整版PDF

    重构不仅仅是对代码的简单重写,它还包括了对代码的优化,使得代码更加清晰、易于理解,并且具有更好的性能和可维护性。它强调的是软件的内在质量,确保系统的基础结构保持强健,从而支持后续的开发和变化。 本书的...

    重构(chm格式 中英文两本)

    9. **重构与设计模式**:重构可以帮助实现设计模式,提升代码结构,比如单例模式、观察者模式等。 书中的每个重构手法都配有详细的步骤和示例代码,方便读者实际操作。同时,书中还强调了重构的重要性,它不仅仅是...

    代码到底该如何重构?.doc

    - 如果代码过于混乱,可能需要考虑重写而不是重构,特别是当现有代码无法正常工作时。 ### 3. 代码的坏味道 **重复代码**:重复的代码意味着失去了代码复用的机会,应通过提炼函数或类来消除重复。 **过长的类/...

    本人精品课程毕业设计的重构,使用springboot框架重写.zip

    【标题】"本人精品课程毕业设计的重构,使用springboot框架重写.zip" 提供了主要的信息,即这是一个关于毕业设计的项目,并且这个项目进行了重构,采用了Spring Boot框架进行重写。Spring Boot是Java领域广泛应用的...

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

    重构通常涉及重写代码,使之易于维护、理解,并且效率更高。重构包括很多细节的操作,例如重命名变量、分解长函数、移除重复的代码、提取类和接口等。《重构—改善既有代码的设计》(Refactoring: Improving the ...

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

    重构的过程并不是简单的修改或重写代码,而是系统性地发现并解决代码中的设计问题,通过一系列小步骤来改进代码的结构,而不改变其外在行为。这些步骤包括提取函数、移动函数、提取类、引入参数对象等,都是书中详细...

    毕业设计:本人精品课程毕业设计的重构,使用springboot框架重写.zip

    毕业设计:本人精品课程毕业设计的重构,使用springboot框架重写

    课设&大作业&毕设-本人精品课程毕业设计的重构,使用springboot框架重写.zip

    在本项目中,"课设&大作业&毕设-本人精品课程毕业设计的重构,使用springboot框架重写.zip" 提供了一个基于Spring Boot框架的毕业设计重构案例。Spring Boot是一个流行的Java开发框架,它简化了创建独立的、生产级别...

    PHP 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数

    例如,如果现有代码非常混乱,重写整个模块可能比重构更为合理。另外,项目即将结束时进行重构可能会带来更多问题,因此此时应避免重构,可考虑将重构延后到下一个项目版本中去解决。 5. 代码的坏味道 代码的坏味道...

Global site tag (gtag.js) - Google Analytics