`

.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。[/size][/size]

 

分享到:
评论

相关推荐

    java代码重构经验分享

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

    JAVA学习资源1.0

    1.Java 并发编程从入门到精通...18.java代码重构 19.一线架构师实践指南 20.springCloud微服务实战 21.重构改善 如此多的书籍是作者辛苦整理,多年沉淀学习的成果,今日拿出分享给新秀程序员,和想进入开发编程的小白。

    java代码重构经验总结

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

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

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

    Java 代码重构示例

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

    Java 代码重构实例

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

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

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

    java代码重构圣经

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

    java代码重构一到六章

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

    java代码重构

    Java代码重构是一个重要的软件开发实践,它涉及到对现有代码的改进,目的是提高代码的可读性、可维护性和整体质量,而不改变其外在行为。重构对于大型项目尤其关键,因为随着时间的推移,代码可能会变得复杂且难以...

    java代码重构系统1

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

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

    《重构改善既有代码的设计》是针对提升Java代码质量的重要参考书籍,它的核心思想在于如何通过重构技术来改善和优化现有的代码设计,使其更为简洁、易于维护和扩展。"重构"一词在软件工程领域指的是在不改变软件外部...

    将jar包转成.java的源码的工具

    对于Java,这通常涉及到解析字节码并尝试重构为人类可读的.java文件。这个过程可能会丢失一些元数据,比如原始注释和精确的源代码结构,因为字节码不保留这些信息。 3. **常用的反编译工具**: - **JD-GUI**:这是...

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

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

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

    Martin Fowler所著的《重构:改善既有代码的设计》就是一本专注于Java语言重构实践的经典指南。 本书的核心是向读者传达重构的必要性和重构所能带来的诸多好处。书中详细阐述了重构的基本原理和操作技术,并且用...

    java重构改善既有代码设计

    Java重构是一种针对已有代码设计进行优化的技术,旨在提高代码的可读性、可维护性和整体结构,而不会改变其外部行为。在这个过程中,开发者通过一系列小型、精确的步骤改进代码,消除坏味道,提高设计质量,同时保持...

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

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

    redhat.java-0.64.1.vsix Java VScode的语言支持离线安装包

    代码/源操作/重构 Javadoc徘徊 组织进口 手动或保存时触发 使用Ctrl+Shift+v(Cmd+Shift+v在Mac上)将代码粘贴到Java文件中时。 类型搜索 代码大纲 代码折叠 代码导航 编码镜头(参​​考/实现) 强调 代码格式(按...

    重构java代码简洁之道

    "重构Java代码简洁之道"的主题旨在探讨如何通过有效的重构技术提升代码质量、可读性和可维护性,同时保持代码的简洁性。这对于任何Java开发者来说,都是一个值得深入学习的课题。 重构是一种在不改变代码外在行为的...

Global site tag (gtag.js) - Google Analytics