重写前人的Code? 天啊,这其中必有冤情阿!

一支历史悠久的报表,若干年后人事已非但是主管交代你改写,报表跑一次要四小时且中间就有可能会死掉,能帮你的只有源代码,你(你)要怎么办呢!?以下是我的血泪记录。

前阵子主管忽然跟我说有支年度报表的程序需要作些修改,因为跑出来大概要三四个小时,且有可能在中间就死掉了,

所以困扰那个部门很久了,希望我们可以看看问题出在哪里,所以这档事就变成我那阵子的梦靥....(泣)。

第一眼看到源代码,我就再想他怎会这样子写呢,但是又害怕其中有冤情,所以就进入了以下的轮回。

  • 绝望

因为根本不知道从何下手,也因为年代久远人事已非没有人可以询问,也没有人敢确定那些逻辑是否还是正确,

且注解也写的很玄啊,所以一整个茫然啊(空)!。

  • 从好懂的先整理

只好从一些比较简单的Method先去看懂其中的意义,改一下命名方式,或是一些你确定不会影响报表

产出的元素,改的时候还是很抖啊...!

  • 再次绝望

改完上述敢改的之后,我也不知道还能在做什么了,所以又停滞了一阵子,做些其他项目来让自己不要这么空虚,

天啊,这玩意儿好难懂啊,我冏了。

  • 开始有希望

或许是因为太久没改怕对不起主管以及那些User,不知道哪里来的勇气以及希望,所以我开始大幅度设计那边要更动,

也不再害怕哪边可能会大挂点,因为至少先有个样子再说嘛(先求有再求好嘛)。

  • 快速结案

大量修改源代码,因为已经到这地步了,不赶快把它了结也不行啦,常言道:头都剪了,不洗不行了(= =a)。

  • 大量Bug蜂涌而至

妈啊,怎么这么多虫虫啊,虽然前面已经有心理准备,但是常常改一个再跑三个出来,认命啦,修改吧!胖皮,

改完啰,现阶段好像都ok啰,也好一阵子没有什么User Call啰,看来是真的结案啰(大误)!

  • 觉悟(另一说绝望)

又过了一阵子,又有问题跑出来了,且我发现源代码内真的是有隐情啊,才了解人家当初为什么这样写嘛....,

所以又修改之后,我希望不要又过一阵子后又要再重演了(虽然我知道这一定会的!),也希望若干年后有人重写我这段的话

他也可以了解我现在的痛,哈哈。

我想以后如果还有机会改写前辈的Code,我想我会更有经验的。^^

这是我观看 The 7 stages of refactoring 后的血泪记录。

原文:大专栏  重写前人的Code? 天啊,这其中必有冤情阿!

原文地址:https://www.cnblogs.com/chinatrump/p/11458438.html

时间: 2024-11-08 21:52:47

重写前人的Code? 天啊,这其中必有冤情阿!的相关文章

怎样改动、扩展并重写Magento代码

作为一个开发人员的你,肯定要改动Magento代码去适应你的业务需求,可是在非常多时候我们不希望改动Magento的核心代码,这里有非常多原因, 比如将来还希望升级Magento.还想使用很多其它的Magento代码.假设你正在寻找改动Magento代码的最佳方式,那么此篇文章将会是一个不错的教程. 适合对象:高级开发人员 适合目标:开发人员希望自己定义改动Magento 当前版本号:Magento versions: 1.4.0.1 作者:精东 重写Magento模块(Module) 第一步,

如何修改、扩展并重写Magento代码

作为一个开发者的你,肯定要修改Magento代码去适应你的业务需求,但是在很多时候我们不希望修改Magento的核心代码,这里有很多原因, 例如将来还希望升级Magento.还想使用更多的Magento代码.如果你正在寻找修改Magento代码的最佳方式,那么此篇文章将会是一个不错的教程. 适合对象:高级开发者 适合目标:开发者希望自定义修改Magento 当前版本:Magento versions: 1.4.0.1 作者:精东 重写Magento模块(Module) 第一步,你需要创建属于你自

Asp.net 主题 【1】

页面中默认的显示样式太朴素,一页一页的设置控件的显示样式效率又太低,主题和皮肤则提供了一种高效的设计方案. 一.添加主题 二.添加皮肤文件(.skin): 在皮肤文件中添加如下代码 <asp:TreeView runat="server" ShowLines="True" ExpandDepth="0">         <NodeStyle Font-Size="12px" ForeColor="

Chapter 6 堆排序

-------------------注明---------------- 以下内容来自于<算法导论>           lz新手,存在各种错误以及各种不合理的地方望大家指出 堆排序时间复杂度为O(nlgn),并且就有空间原址性:任何时候都只需常数个额外的元素空间存储临时数据 6.1 堆 堆是一个数组,但可以被看做近似的完全二叉树,树上的每个结点对应数组中的一个元素.除最底层外,该树是完全充满的! 实例(原书上的图): 可分为最大堆和最小堆,最大堆性质:A[parent(i)]≥A[i] -

Android四大基本组件介绍与生命周期介绍。

Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器. 一:了解四大基本组件 Activity : 应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应. Activity之间通过Intent进行通信.在Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据. 典型的动作类型有:M AIN(activity的门户).V

Apache 域名跳转配置

域名跳转 就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范.平时帮助我们实现拟静态,拟目录,域名跳转,防止盗链等 . 参数格式 参数: Apache mod_rewrite 规则重写 1) R[=code](force redirect) 强制外部重定向 说明:强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定,将用缺省的302 HTTP状态码. 2) F(force URL to be forbidden)

Oauth2.0详解及安全使用

引言:刚刚参加工作的时候接到的第一个任务就是接入新浪的联合登录功能,当时新浪用的还是oauth1.0协议.接入的时候没有对oauth协议有过多的了解,只是按照开放平台的接入流程进行开发,当时还在想这么麻烦就是为了作一个登录功能?(为当年的无知汗颜...).再后来上家公司需要开发一套自己的基于oauth2.0的联合登录功能,粗粗的看了下oauth2.0协议流程,自以为了解了便开始设计开发,现在来看真是漏洞无数啊(幸好现在功能已经下线).最近在现家公司要作部门内部分享,所以打算好好的研究一下oaut

HTML5+规范:Geolocation(管理设备位置信息)

Geolocation模块管理设备位置信息,用于获取地理位置信息,如经度.纬度等.通过plus.geolocation可获取设备位置管理对象.虽然W3C已经提供标准API获取位置信息,但在某些平台存在差异或未实现,为了保持各平台的统一性,定义此规范接口获取位置信息. 1.方法 1.1.getCurrentPosition: 获取当前设备位置信息 void plus.geolocation.getCurrentPosition( successCB, errorCB, option ); 说明:位

HTML5+规范:Downloader(管理网络文件下载任务)

Downloader模块管理网络文件下载任务,用于从服务器下载各种文件,并支持跨域访问操作.通过plus.downloader获取下载管理对象.Downloader下载使用HTTP的GET/POST方式请求下载文件,符合标准HTTP/HTTPS传输协议. 1.方法 1.1.createDownload: 新建下载任务 Download plus.downloader.createDownload( url, options, completedCB ); 说明:请求下载管理创建新的下载任务,创建