【重构学习】11 大型重构

好了,前面所有的都是很简单的例子,现在开始的是大型重构。

对于大型重构来说,情况复杂多变,耗时也会很长,前面的简单重构大多是在一个小时内可以完成,但是对于大型重构来说可能需要几个月,甚至数年。如果是一个运行中的系统,重构起来只能每天一点点去慢慢重构。

(恕我直言,在国内恐怕这样的公司也很少。所以我们要自己养成随时重构的习惯,不要挖坑给自己埋最好。没谁能给你这么长时间重构,特别当你是个低端程序员的时候。你得相信,你所有偷懒的举动,都会给你以后的工作带来麻烦。除非你明天走人了,那么你的锅可能就给我背了,等你到了新的公司,你又发现你也成了一个背锅的。)

1、梳理并分解继承体系

修改点:某个继承体系同时承担两个责任。如果继承体系中的某一特定层级上的所有类,其子类名称都以相同的形容词开始,那么这个体系很可能就是承担着两项不同的责任。

做法:建立两个继承体系,并通过委托关系让其中一个可以调用另一个。

动机:混乱的继承体系会导致重复代码。

好吧,简单来说,你可以理解为桥接模式。

2、将过程化设计转为对象设计

修改点:就是出现了C语言式的代码

做法:将数据记录变为对象,将大块的行为分成小块,并将行为移至相关对象中。

3、将领域和表述/显示分离

修改点:某些GUI类中包含了业务逻辑

做法:将领域逻辑分离出来,并为它们建立独立的领域类

4、提炼继承体系

修改点:你为某个类做了太多工作,其中一部分以大量条件表达式完成

做法:建立一个继承体系,以一个子类表示一种特殊情况

小总结:

好吧,上面四个点写得很概括,但是其实包括了很多东西。

越复杂的东西反而讲起来越简单。

就像我说我们来写个注册系统吧,多简单,但是实施起来其实也不简单。

很多时候我们都不愿意去改别人的代码,因为可能业务就已经很复杂了,再加上可能他也写得烂。

你唯一必须做的是,至少保证自己的代码别人维护起来很轻松,与君共勉吧!

时间: 2024-12-18 03:15:10

【重构学习】11 大型重构的相关文章

重构摘要12_大型重构

<重构-改善既有代码的设计>Martin Fowler 摘要:   第十二章 大型重构 特点 依据须要安排自己的工作,仅仅在须要加入新功能或修补错误时才进行重构. 进行大规模重构时,有必要为整个开发团队建立共识.意识到:重构正在进行,每一个人都应该对应地安排自己的行动. Tease Apart Inheritance 梳理并分解继承体系 某个继承体系同一时候承担两项责任 建立两个继承体系,并通过托付关系让当中一个能够调用还有一个. 假设继承体系中的某一特定层级上的全部类,其子类名称都以同样的形

【重构学习】03 重构与测试

新的一年了,我却在这里写这个鬼 <重构>的这一章主要是讲java的一个测试框架,我直接就跳着看了 只是简单的看了一下它的思想 重构需要一个良好的测试体系,而我们需要为重构构建一个这样的体系,这是重构的前提 不需要期待完美测试,需要的是不完美的测试已经在实际执行了 测试的时候考虑可能出错的边界条件,并集中火力 不要因为测试无法捕捉所有BUG就不写测试,至少它可以捕捉大多数 花合理的时间抓出大多数BUG 写测试代码去让其执行自动化测试 好了这就是本章主要的内容 不太多,就来简单谈一下自己对测试的理

【重构学习】12 重构学习感想

其实也没什么想继续说重构了,你我都清楚这仅仅只是一个开始,进一步的就是靠个人去不断积累重构经验了. 我们学到的依然只是套路,玩熟的话还远着呢. 不仅仅是何处重构,如何重构的问题,更需要对重构的时间进行掌控,并且迫切需要实施重构的勇气. 好吧,自学完了<重构>. 用时18天. 从来没有如此兴奋过,这一切好像都只是开始. 我的学习兴趣被激发起来了吗,是的. 它没有在我高中时候来到,也没有在我大学时候来到,如今才开始,所幸不晚.

【重构学习】 04 重构与设计模式

好吧,<重构>这本书的第五章,主要是对即将要写到的一些具体重构手法的写作结构的一种描述,并没有什么重要的东西. 仿佛是为了庆祝元旦的放假,特意给我准备的章节,为了让我完成今天的任务而特意水了一章. 好吧,还是有一句重要的话:设计模式为重构提供了目标,而重构是到达之路. 以下是我的废话,大神莫笑: 如果你不明白设计模式是什么?不要紧,就算你不明白也不要紧. 因为很多人学了设计模式都会忘掉,有的时候是因为他们不用,所以忘了.有的时候是因为用的多了,所以忘了. 如果是后者那就是无招胜有招的境界,如果

【重构学习】01 重构与性能

重构并不意味着性能更好,但是重构可以让性能优化更容易!!!    关于写出高性能代码 写出高性能代码的前提:首先你得有个可以调整的程序. 就像别人问你如何和女朋友更好相处一样,首先你得有个女朋友. 写出高性能代码的方法: 1.时间预算法 给每个组件分配一定的资源——包括时间和执行轨迹,每个组件不能超过自己的预算. 通常用于要求极高的实时系统. 2.持续关注法 这种方法要求任何程序员在任何时间做任何事情时,都要保证系统的高性能. 这种方式很常见,感觉很有吸引力,但通常不会起太大作用.(<重构>作

C#重构学习2

转帖重构学习 重构?代码坏味道?看到这两个疑问,也许就知道本期的话题是关于“重构”的,重构无处不在,重构可大可小,重构随时随地.让重构时刻记在脑海,使自己的代码变的优美.就让这本“重构艺术”手册带你走进重构的世界,亲密接触重构,如欣赏艺术般,体会重构的魅力. 文章下载地址:http://files.cnblogs.com/xia520pi/C_Sharp_Refactoring.rar 文章的目录: 1.代码重构 1.1.版权声明 1.2.内容详情 2.项目重构方案设计 2.1.版权声明 2.2

【重构学习笔记】

重构的定义:重构是对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本 从定义里我们可以看出,重构是对代码和架构的一种修改,旨在提高代码的效率和可读性,来达到降低修改成本的目的.而重构对于用户体验来说,就像定义中说到的,只能对可观察行为作出很小的变化,甚至不造成变化. 关于同事些代码经常会把DAO注入到表现层Controller里面使用,我一直很反感这样的做法,奈何找不出可以反驳这些老员工的理由,确实才疏学浅了. 认真想想 例如,一般情况,我们会在Ser

【重构学习】05 函数的重构

<重构>这本书的代码都是java,我准备用C#来一遍. 而今天我的主要任务是写一大段垃圾代码出来,然后重构(仅限于函数的,不涉及到其它方面的重构). 程序界面: 功能介绍: 侠客名字自己取,然后点击按钮随机角色的属性, 根骨,经脉,柔韧,悟性等四项属性值都是随机而来. 其他的都是由这四个属性计算而来: 根骨:影响气血,基础外攻和基础内攻 经脉:影响内力和基础内攻 柔韧:影响身法和基础闪避 按钮功能的垃圾代码如下: /// <summary> /// 产生侠客 /// </su

重构学习-重构原则

什么是重构: 视上下文重构有两个不同的定义,第一个定义是名词形式 对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本 重构的另一人用法是动词形式 使用一系列的重构手法,在不改变软件可观察行为的前提下调整其结构. 有人说重构就是整理代码 ,从某种角度上来说,是,但是重构不止于此,因为它提供了一种更为高效且受控的代码整理 技术,运用代码重构技术后你会发现对代码的整理会比以前更加高效. 重构的目的是使软件更容易被理解和侯.你可以在软件的内部做很多修改,但必须