`
zhaohongwei1982
  • 浏览: 7931 次
  • 性别: Icon_minigender_1
  • 来自: 天上人间
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

java代码重构

    博客分类:
  • java
阅读更多

      前段时间读过martin fowler的《重构 ,改善既有代码的设计 》,不禁感叹:他老人家绝对对得起大师这个名号啊!对于入行不久的程序员来说,读这本书对提高代码质量肯定有帮助。就重构这个话题,还和部门同事做了次交流,将交流时的文档整理在此仅作备忘。

软件的成本

         N 年前, Yourdon Constantine Structured Design 一书中将经济学作为了软件设计的底层驱动力,软件设计应该致力于减少整体成本。

 

      COST total = COST develop + COST maintain

      COST maintain = COST understand + COST change + COST test + COST deploy

 

      软件的维护成本占了软件总成本的大部分,想要节约软件成本就要从软件的维护成本下手,而维护成本中理解老代码和修改老代码又占了绝大部分。可见,提高代码可理解性是多么重要,这时重构闪亮登场,为我们改善代码可读性提供了指导性的一些原则和手法。

 

  什么是重构

      看看 Martin Fowler的定义:

      在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。重构是一种有纪律的、经过训练的、有条不紊的程序整理方法,可以将整理过程中不小心引入错误的机率降到最低。本质上说,重构就是在代码写好之后改进它的设计。

                                                                                                                                       --Martin Fowler

 

      重构 名词 对软件内部结构的一种调整,目的是在不改变软件之可察行为 前提下,提高其可理解性,降低其修改成本

      重构 动词 使用一系列重构准则(手法),在不改变软件之可察行为 前提下,调整其结构。

 

      关键的一点是重构离不开单元测试,测试驱动开发的模式。在已有单元测试的基础上进行代码重构,小步前进。

      另外一个比较好的建议是 Kent Beck所说的 两顶帽子使用重构技术开发软件时,你把自己的时间分配给两种截然不同的行为 「添加新功能」和「重构」。

 

重构的好处

  •   使软件更容易理解
  •   帮你找到 bug
  •   提高编程速度

重构时机

  • 三次法则  
  • 添加新功能时
  • Bugfix
  • Code review

 

重构与设计

      重构与设计并不是矛盾的,而是互为补充的:

  • 所有的设计都不可能做到滴水不漏,这个时候就需要重构来堵设计的漏洞;
  • 不能依赖重构而不重视重构。

重构与性能

      重构和性能优化是不同维度的手法,重构的目的是提示程序的可理解性和可维护性,而优化则是侧重提升性能。重构为了提高代码可读性往往还会导致性能不是最优,考虑“二八原则”,如果这段代码不会显著导致程序性能严重下降,我们选择重构。

坏味道及应对重构手法

重复的代码

   提炼函数,提炼类,上移函数,塑造模板函数

过长函数

   提炼函数,查询取代临时变量,函数对象取代函数,分解条件表达式

过大类

   提炼类,提炼子类,提炼接口,以对象取代数据值

过长参数列

   函数取代参数,引入参数对象,保持对象完整

  发散式变化

   提炼类

  散弹式修改

   搬移函数,搬移值域,将类内联

  依恋情结

   搬移函数,搬移值域,提炼函数

  数据泥团

   提炼类,引入参数对象,保持对象完整

  基本型别偏执

   以对象取代数据值,提炼类,引入参数对象,以对象取代数组,以类取代型别码,以子类取代型别码,以 State/Strategy 取代型别码

  Switch 惊悚现身

   多态取代嵌套条件表达式,以 State/Strategy 取代型别码,以明确函数取代参数

  平行继承体系

   搬移函数,搬移值域

冗余类

   内联类,折叠继承体系

夸夸其谈未来性

   折叠继承,将类内联,移除参数,重命名函数

令人迷惑的暂时值域

   提炼类

过度耦合的消息链

    隐藏委托

中间转手人

   消除中间人,将函数内联,以委托取代继承

  狎昵关系

    搬移函数,搬移值域,改双向关联为单向,以继承取代委托,隐藏委托

异曲同工的类

   重命名函数,搬移函数

不完美的类库

   引入外加函数,引入本地扩展

  单纯数据类

    搬移函数,封装值域,封装集合

  被拒绝的遗赠

    以委托取代继承

  过多的注释

    提炼函数

重构法则分类

重新组织函数

  • 提炼函数
  • 将函数内联化
  • 将临时变量内联化
  • 以查询取代临时变量
  • 引入解释性变量
  • 剖解临时变量
  • 移除对参数的赋值操作
  • 以函数对象取代函数
  • 替换算法

在对象间搬移特性


  • 搬移函数
  • 搬移值域
  • 提炼类
  • 将类内联化
  • 隐藏委托关系
  • 移除中间人
  • 引入外加函数
  • 引入本地扩展

重新组织数据

  • 自封装值域
  • 以对象取代数据值
  • 将实值对象改为引用对象
  • 将引用对象改为实值对象
  • 以对象取代数组
  • 将单向关联改为双向
  • 将双向关联改为单向
  • 以符号常量或字面常量取代魔法数
  • 封装值域
  • 封装集合
  • 以数据类取代记录
  • 以类取代型别码
  • 以子类取代型别码
  • State/Strategy 取代型别码
  • 以值域取代子类

简化条件表达式


  •   分解条件表达式
  •   合并条件表达式
  •   合并重复的条件判断
  •   移除控制标记
  • 以卫语句取代嵌套条件式
  •   以多态取代条件式

简化函数调用

  • 重新命名
  • 重新命名函数
  • 查询和修改分离
  • 以明确函数取代参数
  • 保持对象完整
  • 以函数取代参数
  • 引入参数对象
  • 以工厂函数取代构造函数
  • 以异常取代错误码
  •   将查询函数和修改函数分离   

处理概括关系

  • 值域上移
  • 函数上移
  • 函数下移
  • 值域下移
  • 构造函数本体上移
  • 提炼子类
  • 提炼超类
  • 折叠继承体系
  • 塑造模板函数
  • 以委托取代继承
  • 以继承取代委托

 

最后,附上ppt。

 

ps.

je的编辑器真够难用的啊:(

分享到:
评论

相关推荐

    .java代码重构

    《.java代码重构》 代码重构是软件开发过程中的一个重要环节,它涉及到对现有代码的改进,以提高代码的可读性、可维护性,同时并不改变其外在行为。在Java编程中,代码重构是一种常见的实践,尤其在大型项目中,...

    java代码重构经验分享

    Java 代码重构经验分享 Java 代码重构是指在不改变外部行为的情况下,修改代码的内部结构,以提高代码的可维护性、可读性和可扩展性。本文总结了 Java 代码重构的经验和技术规范,包括重构要求、重构的工作、代码的...

    java代码重构经验总结

    ### Java代码重构经验总结 在软件开发过程中,代码重构是一项重要的技能,它旨在不改变代码外部行为的前提下,改进其内部结构,从而提升代码质量和可维护性。本文将深入探讨Java代码重构的关键点,涵盖重构原则、...

    java代码重构一到六章

    ### Java代码重构:掌握优化现有代码的艺术 #### 引言 在软件开发的过程中,随着项目的不断演进,代码库往往会出现复杂度增加、可读性和可维护性下降的问题。这时,进行代码重构变得至关重要。重构是指在不改变...

    Java 代码重构实例

    Java代码重构是一种优化编程实践,旨在改进代码的结构和可读性,而不改变其外部行为。重构对于提高软件质量和维护性至关重要,尤其是在大型项目中。以下是一些在Java重构中的关键原则和技巧,通过实例来展示如何应用...

    Java 代码重构示例

    Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例

    java代码重构圣经

    java代码重构以前忽视了,最近在看 字字珠玑,相见恨晚

    java代码重构系统1

    Java代码重构系统1是一个专注于提升代码质量和可维护性的项目,主要目标是对Java代码进行格式、命名和结构的规范化。在代码重构过程中,遵循良好的编码规范是至关重要的,本项目选择了Google的代码规范作为标准。 ...

    java 代码重构优化 Java 代码优化 java设计优化

    以上就是关于Java代码重构、优化以及设计优化的一些关键点,这些知识不仅能提升代码质量,还能帮助开发者更好地应对项目中的各种挑战。通过深入学习《重构-改善既有代码的设计》这样的经典书籍,你可以进一步提升...

    一本介绍如何将现有的 Java 代码重构为 Kotlin 代码的书籍

    综上所述,《从Java到Kotlin:重构指南》是一本非常适合Java开发者学习Kotlin并进行代码重构的专业书籍。它不仅提供了丰富的理论知识,还有大量的实践案例供读者参考,是从事软件开发工作的专业人士不可多得的宝贵...

    Java代码重构要求简要汇总.zip

    Java代码重构是软件开发过程中的一个关键环节,它旨在改进代码的结构,提高代码的可读性和可维护性,而不改变其外部行为。这个过程对于长期的项目维护和团队协作至关重要。以下是对“Java代码重构要求简要汇总”文档...

    java 代码重构

    ### Java 代码重构 #### 重构的定义与目的 重构是一种对软件内部结构进行调整的过程,旨在不改变软件外部行为的前提下改善其结构。通过重构,可以提高代码的可理解性和可维护性,减少后续修改的成本。 #### 重构...

    看大师如何重构代码(java程序员必看)

    ### Java代码重构的策略与技巧 1. **提炼方法**:将一段代码块封装成一个独立的方法,不仅可以减少代码重复,还能使逻辑更加清晰。这是重构中最基础也是最常用的技术之一。 2. **重命名变量和方法**:选择更具有...

    代码重构总结实例

    - "java代码重构经验总结.txt"可能包含作者在实际工作中遇到的问题和解决方案,是宝贵的实践经验分享。 通过对这些资料的学习和实践,开发者可以掌握重构的核心技能,提升代码质量和开发效率,同时也能更好地理解...

    SourceMonitor: 代码重构的小工具,大用场

    它能够帮助程序员有效地进行代码重构,提高代码质量和可维护性。通过深入理解代码结构,SourceMonitor提供了一种直观的方式来了解项目中的关键信息,包括代码行数、注释比例、类和方法的复杂性等。 **核心功能** 1...

    代码重构ppt

    优秀的程序员,应该懂得代码重构,写出更加优美和逻辑清晰的代码

    Java代码重构的几种模式详解

    Java代码重构是提升软件质量、可读性和维护性的重要手段,它不改变代码外在行为,而是优化内部结构。本文将详细阐述Java代码重构的三种主要模式:重命名方法重构、引入解释性变量重构和以查询取代临时变量重构。 1....

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

    《重构:改善既有代码的设计》是一本在IT领域广受推崇的经典著作,专注于软件开发中的重构实践,尤其针对Java编程语言。重构是软件开发过程中的一个重要环节,它旨在提升代码的可读性、可维护性和整体质量,而不会...

    改善既有的代码重构(ppt)课件

    改善既有的代码重构(ppt),改善既有的代码重构,改善既有的代码重构PPT

Global site tag (gtag.js) - Google Analytics