`
james_lover
  • 浏览: 44444 次
社区版块
存档分类
最新评论

重构后的效率提升效果【续】一个方法几千行的程序是如何产生的?

阅读更多

被那个几千行的方法恶心后,就开始着手对代码进行重构。

 

由于重构前的代码基本是不可测的状态,所以此次基本上是推倒重来式的重构(只有部分业务逻辑代码重用)。

花了三天时间,把原有的业务逻辑梳理后,按照下面三个原则重新设计代码流程:

1:流程处理与各个业务的逻辑处理分开,实现流程与业务解耦
2:不同的业务规则代码分开,实现业务间解耦
3:同一业务规则的实现代码集中在一个实现类里,实现业务代码聚合

粘一个丑陋的类图:

 

 

 

如此设计的原因是:

1:虽然业务纷杂,五花八门,但大体上的业务处理流程是一样的,而且非常稳定(快两年了,流程仍然是最初的5大步骤)。将流程代码剥离之后,业务只需专注于每个处理步骤的实现,测试范围大大缩小。

 


2:由于在数据库中,一个业务表被多个业务复用,一个表字段在不同业务中代表含义不同的现象非常普遍。造成业务代码中重复的if.else.判断非常多。 代码可读性很差,而且难于维护(一个简单的业务变动要改20几个地方,漏掉几个也难以测试出来)。
     因此,把所有业务抽象了一个 abstract父类,所有具体业务都是该类的子类。 业务判断只在一个factory类里体现。业务变更的改动范围大大缩小。

 

3:同一业务的具体处理逻辑都在一个类里实现,实现同一个业务处理接口。由于接口封装了业务的变动,使流程处理的代码稳定下来。 增加新业务,只要实现该接口即可,大大减少了代码编写量。

 

 

重构后效果对比:(重构前,修改过一个简单的业务变更)

重构前:修改代码40行,花了1多小时。(改了10几处,大部分时间在看代码,眼都看花了)
重构后:只需改动2 行代码,不会超过5分钟。

 

构前:测试花了2天,只覆盖变动的业务,改动代码涉及的其它业务没测试(都测一遍估计要半个月)。
重构后:0.5小时。

 

从此以后:谁再说改这个业务要2天,我打他屁股。

 

 

  • 大小: 23.7 KB
6
2
分享到:
评论
3 楼 james_lover 2014-06-17  
代码结构随业务的变化而变化。
文章中的重构只适用于“业务与业务间相对独立”的情况。
如果“业务间耦合太紧” 就只能别想他法。
目前还没有遇见过一个复杂业务,跟另一个复杂业务间有复杂的关系的情况。
2 楼 a442579302 2014-06-17  
“打他屁股”。。。。。。先扔肥皂吗
1 楼 vinceall 2014-06-17  
亲身体会过,前期赶进度,switch不停的加case,后来抽象成事件驱动,每个event一个小类搞定~

相关推荐

    27丨理论一:什么情况下要重构?到底重构什么?又该如何重构?1

    重构是软件开发过程中的一个重要环节,它涉及到代码的优化、设计改进和质量提升,而不改变程序的外部行为。本文将详细探讨重构的目的、对象、时机和方法,帮助开发者理解和掌握重构的核心理念。 **重构的目的(Why...

    基于Python的eInkUI设计源码重构与效率提升

    该项目是针对eInkUI设计的源码eink-clock-mP的重构工程,涉及769个文件,包括699个PNG图像文件、39个Python源代码文件、13个JPG图片文件、5个XML文件、4个Markdown文件、2个Git忽略文件、2个字体文件、1个IDE配置...

    小波分解和重构MATLAB程序

    小波分解是将一个信号或图像分解成不同频率成分的过程,这些成分由小波函数的不同尺度和位置表示。2:1抽样比例指的是在分解过程中,每一层细节信息的分辨率减半,而时间或空间轴上的采样点数保持不变,这样可以保证...

    代码重构源码(包含重构前后代码)

    这个压缩包文件“代码重构源码(包含重构前后代码)”提供了面向对象编程领域中的一个实例,具体是对影片出租店租赁程序的重构过程。通过对原始代码(First_Instance_Original)进行分析和改进,我们可以深入理解...

    Matlab重构算法_matlab_matlab压缩感知重构算法程序实现_压缩感知_

    1. **信号采样**:根据压缩感知理论,通过一个测量矩阵(如随机矩阵或离散余弦变换矩阵)对原始信号进行采样,得到压缩后的观测值。 2. **稀疏表示**:将原始信号转换到一个基域,使得信号在此域内变得稀疏。常用的...

    小波分解与重构的几个matlab程序

    而`小波分解与重构的几个matlab程序`很可能是一个包含多个示例脚本或函数的文件,每个都演示了特定的小波分解和重构方法。初学者可以通过运行这些程序,观察输出结果,对比不同小波基和分解层次对信号处理的影响。 ...

    Android开发教程之重构程序

    1. **分离界面元素**:首先,我们需要将界面元素(如按钮、文本框等)的声明和初始化提取出来,形成一个单独的方法 `findViews`。 ```java private Button calcbutton; private EditText fieldheight; private...

    delphi重要的重构器程序.rar

    《Delphi重构器程序详解及应用》 在软件开发领域,重构是一项至关重要的工作,它旨在改善代码结构,提高代码...正确且有效地利用重构器,可以大大提高开发效率,降低维护成本,是每一个Delphi开发者都应该掌握的技能。

    软件重构讲义,自己整理的一个软件重构ppt

    《软件重构讲义》是关于软件开发中重构技术的一份资料,主要涵盖了重构的基本概念、目的、...这份资料为开发者提供了一个深入理解重构概念和技术的框架,对于提升个人和团队的开发效率及软件质量具有重要的指导价值。

    33节点系统重构程序实现_33节点重构_33节点配电网重构_配电网IEEE—33_配电网_33节点

    5. **评估与优化**:对重构后的网络进行潮流计算,评估重构效果,可能涉及电压稳定性、功率损耗和故障恢复时间等多个指标,进行迭代优化。 在这个过程中,可以使用各种优化算法,如遗传算法、粒子群优化、模糊逻辑...

    混沌序列的相空间重构的MATLABT程序

    在提供的文件"Volterra_混沌序列的相空间重构"中,很可能包含了一个具体的MATLAB程序,用于演示如何进行上述步骤。该程序可能涉及了计算延迟时间、确定嵌入维数,并进行相空间重构的实际操作。通过分析这个程序,...

    CS代码(重构算法程序)

    - `PRISM.rar`:PRISM可能是“概率风险感应系统”的缩写,可能是一个用于风险评估或决策制定的算法程序。 - `GPSR_6.0.rar`:GPSR可能指的是“全局定位系统重构造”算法,这是一个可能用于导航或数据恢复的算法。 ...

    matlab重构图像的程序

    "notch"通常指的是陷波滤波,而"others"可能包含了其他的滤波方法或者图像重构的相关程序。这些代码可以帮助读者理解陷波滤波器和维纳滤波器的实现过程,并提供了一个实践图像重构的平台。 通过运行和分析这些代码...

    Java程序自动锁分解重构.pdf

    为了解决这个问题,本文提出了一个自动锁分解重构的方法,使用静态程序分析和重构技术来自动检测锁的粒度和重构机会,并生成高效的锁分解代码。 自动锁分解重构的步骤主要包括以下几个方面: 1.锁的粒度分析:使用...

    重构_重构_改善既有代码_

    2. 内联函数(Inline Method):如果一个函数只在一个地方被调用,可以将其内容直接替换到调用位置,减少层次,提高效率。 3. 将类的职责分离(Split Class):如果一个类承担了过多职责,应将其拆分为多个更专注的...

Global site tag (gtag.js) - Google Analytics