你需要的不是重构,而是理清业务逻辑(转)
最近我遇到了一位以前公司的同事。他提到了数年前我在那个公司曾经开发过的项目。他说这个项目现在已经变成了“职业杀手”。基本上,任何接触过这个 “职业杀手”项目的人最终都会离开这个公司。如果公司想让名下的程序员人数>0,唯一的办法就是花数月时间完全重构这个系统。
对于这事我有两点要说。首先,在我离开这个公司前,这个系统的单元测试覆盖率已经达到了85%,所以,不要责备我。第二,这么大规模的重构?肯定会出问题。
每 一个系统里都至少有一个成为人民公敌、让所有人害怕的组件。它承载了太多的任务,它拥有太多状态,太多的其它组件调用它。当时间到了偿还技术债务的时候, 人人都会把目光投向这个组件。然而,如果你对这个组件只有一个不全面的理解,你放下所有工作来完全重构它,那你成功的几率会很小。这个组件,就就它表现出 来的令人恐怖的程度和复杂相比,它的实际情况会比你想象更复杂,更恐怖。
你认为这个组件是如何发展成这样一个不幸的状态的?是因为公司雇用 了一个笨蛋,让他肆无忌惮的往系统里增加复杂度?或是因为这个组件最初设计的太抽象,由于多年来需求的变更,它的责任范围不断的扩大?(出于个人的自尊, 我宁愿相信这个“职业杀手”属于后者)。十有八九,这个组件变成如今这个恐怖的状态,都有由“聪明人”的一些“好意”造成的。如果你决定做一次大的重构, 你实际是欠下了另一笔技术债务留给后人。
为了能真正的彻底偿还这笔债务,你需要去分解这个系统的复杂度。你需要花时间寻找所有调用这个组件 的客户端。你需要花时间跟你的同事交流,了解这个这个组件的历史和它是如何被使用的。你需要简化这个组件的周边环境,看看它是如何运作的。每周,你都需要 花更多的时间来更清楚的了解这个组件的业务。只要有足够长的时间跨度,你最终能理清所有复杂的问题。
从实际方法上说,这个问题应该怎么办?与其现在花3个整月的时间做一次完全的重构,不如先用一个季度的时间做清理工作。最后还是要重写,但有了3个月的计划准备,你有了时间去分析和设计。你有了时间来理清业务。
你需要的不是重构,而是理清业务逻辑(转)相关推荐
- 模板方法模式详解附有代码案例分析(包含模板方法模式重构JDBC操作业务代码示例)
模板方法模式 一.模板方法模式的概念和角色 (一).模板方法模式的概念 (二).模板方法模式的角色 二.模板方法模式的应用场景 三. 模板方法模式的代码示例 四.模板方法模式重构JDBC操作业务 五. ...
- Java用观察者模式重构复杂的业务代码
1. 定义一个统一的回调接口 public interface CallerInter {void call(Param param); } 2. 定义观察者接口 public interface O ...
- 代码重构(四):条件表达式重构规则
继续更新有关重构的博客,前三篇是关于类.函数和数据的重构的博客,内容还算比较 充实吧.今天继续更新,本篇博客的主题是关于条件表达式的重构规则.有时候在实现比较复杂的业务逻辑时,各种条件各种嵌套.如果处 ...
- 【原】移动web资源整理
[原]移动web资源整理 回顾2014年,刚转来到新的部门,非常渴望做出一个所谓的成功产品,心态几乎变了,每天都忙忙碌碌在项目中,把原来阅读和学习的习惯给忽视了,作为一个技术人员,没有通过学习新的知识 ...
- 程序员必备的思维能力:结构化思维
凌云时刻 在日常工作中,我们时常会碰到这样的情况,有的人讲一件事情的时候逻辑非常混乱,说了很多事情的罗列,却说不到重点.有的人写代码,本身的业务逻辑并没有多复杂,但呈现出的代码却像一堆线团,混乱不堪, ...
- 外刊IT网站经典计算机开发,评论,总结文章汇总共享
全部文章 · 2013年十二月 (19) · 25: 辞掉你的工作,去开发一个应用:我的创业故事 (5) · 24: 你是一个努力工作的程序员吗?还是一个懒惰 ...
- 太原理工大学软件学院信息安全方向软件安全技术重点
2019级信息安全方向软件安全技术课 代课教师为王星魁 一.书上重点: 第一章 1.零日攻击 什么是零日攻击? 零日漏洞是指未被公开披露的软件漏洞,没有给软件的作者或厂商以时间去为漏洞打补丁或是给出解 ...
- uml通信图画法_UML 交互图 (顺序图、通信图、鲁棒图、定时图)
交互与交互图 交互的概念 一次交互就是指在特定语境中,为了实现某一个目标,而在一组对象之间进行交换的一组消息所表示的行为 消息 UML中的4种交互图 顺序图:顺序图是一种强调消息时间顺序的交互图,为读 ...
- Oracle的PL/SQL编程前奏之基础技能实战一(匿名子程序)
Oracle的PL/SQL编程之基础技能实战一 一>基础代码检查检查以bm_开头的系统初始化编码表是否有空值.与业务系统相关的编码项不能存在空值,会导致系统业务无法办理.为初始化数据表.在做测试 ...
最新文章
- 机器学习在热门微博推荐中的应用
- 移植uboot第一步:下载,编译,烧到板子上试验
- 「软件测试基础」理论篇之软件测试概论
- Android开发中高效的数据结构用SparseArray代替HashMap
- python中argsort,sort 和 sorted,operator.itemgetter函数
- Cannot resolve corresponding JNI function
- 设为首页、加入收藏 兼容代码
- ORACLE 实现 ID 自增
- python车牌识别系统开源代码_TensorFlow车牌识别完整版代码(含车牌数据集)
- 数电4_4——常见组合逻辑电路(3)数据选择器
- 淘宝店铺所有商品API接口(店铺所有商品列表接口)
- apple id邮箱停止服务器,Apple ID被大范围停用,你可以看看这个帖子。
- dotnet core error 0x80070057
- 变量消元(Varible Elimination)和概率边缘化(Marginalization)的关系
- 第九届玲珑轻院校赛随笔
- TCP 的那些事 | SACK
- SqlConnection,SqlDataAdapter,SqlCommand,SqlParameter
- 深入解析ThreadLocal源码
- GD32F4上使用HAL库实现USB虚拟串口通讯
- 【爬虫 | Python】解决‘Requests Max Retries Exceeded With Url‘报错的问题