最近我遇到了一位以前公司的同事。他提到了数年前我在那个公司曾经开发过的项目。他说这个项目现在已经变成了“职业shashou”。基本上,任何接触过这个“职业sahshou”项目的人最终都会离开这个公司。如果公司想让名下的程序员人数>0,唯一的办法就是花数月时间完全重构这个系统。
对于这事我有两点要说。首先,在我离开这个公司前,这个系统的单元测试覆盖率已经达到了85%,所以,不要责备我。第二,这么大规模的重构?肯定会出问题。
每一个系统里都至少有一个让所有人害怕的组件。它承载了太多的任务,它拥有太多状态,太多的其它组件调用它。当时间到了偿还技术债务的时候,人人都会把目光投向这个组件。然而,如果你对这个组件只有一个不全面的理解,你放下所有工作来完全重构它,那你成功的几率会很小。这个组件,就就它表现出来的令人可怕的程度和复杂相比,它的实际情况会比你想象更复杂,更可怕。
你认为这个组件是如何发展成这样一个不幸的状态的?是因为公司雇用了一个笨蛋,让他肆无忌惮的往系统里增加复杂度?或是因为这个组件最初设计的太抽象,由于多年来需求的变更,它的责任范围不断的扩大?(出于个人的自尊,我宁愿相信这个“职业sahshou”属于后者)。十有八九,这个组件变成如今这个可怕的状态,都有由“聪明人”的一些“好意”造成的。如果你决定做一次大的重构,你实际是欠下了另一笔技术债务留给后人。
为了能真正的彻底偿还这笔债务,你需要去分解这个系统的复杂度。你需要花时间寻找所有调用这个组件的客户端。你需要花时间跟你的同事交流,了解这个这个组件的历史和它是如何被使用的。你需要简化这个组件的周边环境,看看它是如何运作的。每周,你都需要花更多的时间来更清楚的了解这个组件的业务。只要有足够长的时间跨度,你最终能理清所有复杂的问题。
从实际方法上说,这个问题应该怎么办?与其现在花3个整月的时间做一次完全的重构,不如先用一个季度的时间做清理工作。最后还是要重写,但有了3个月的计划准备,你有了时间去分析和设计。你有了时间来理清业务。
相关推荐
这样做可以降低业务逻辑的耦合度,提升服务的复用性和可维护性。 3. **第三方券服务接入**:第三方券服务需要按照制定的标准提供接口,由通用券服务进行调用。这种方式减少了对底层服务的直接依赖,使得券服务更加...
1. 业务流程重构(BPR)的起点:流程描述是改革的基础,帮助企业审视现有流程,寻找改进空间。 2. 优化与设计平台:通过描述流程,可以发现瓶颈,进而优化设计,提升业务效率。 3. 协同工作的启动:明确流程有助于各...
Controller层承担过多职责,不仅处理业务逻辑,还要处理UI更新和UI事件,与Model和View层的职责混淆,这使得编写单元测试变得困难。此外,复杂的业务逻辑往往堆积在Controller层,导致维护工作量大增。 为了解决...
通过这个项目,候选人掌握了前后端分离的设计,使用了WAF框架和QUERTZ任务调度器,以及MYSQL存储过程来处理业务逻辑。 2. **技术栈**:简历中提到了一系列的技术,如jsp、javaBean、servlet、JDBC、struts、...
后台采用 QUERTZ 进行任务管理和调度,业务逻辑采用高效的 MYSQL 存储过程编写。 前台后台独立布置,系统设计成灵活的可扩展的数据导入导出、JOB 运行配置等。 使用技术:jsp、javaBean、servlet、JDBC、struts、...
在落地实施CMDB时,需要构建两层逻辑架构,包括存储层、资源管理层和场景关系层。CMDB系统通常包含功能架构和技术架构,前者关注于提供如配置管理、变更管理、资源可视化等服务,后者则涉及数据存储、数据校验和系统...
在过程中,需要找出关键代码,分析日志,使用可运行的软件体验业务逻辑,以此来加深对源码的理解。 文章还提出了一些个人经验和建议,比如调试时的注意事项,阅读源码时应保持的好奇心和细致程度,以及在阅读过程中...
"智能财务的基本框架与建设思路研究" 智能财务是指利用人工智能、大数据、云计算等技术,对企业财务信息进行...主要包括概念混乱、逻辑层次不清等问题的解决方案,以及明确概念、理清逻辑、建立完善体系等方面的讨论。
2. **数据库设计**:数据库设计是整个系统的核心,包含用户信息、司机信息、订单状态、费用计算等多个表,理解其设计可以帮助我们理清业务流程。 3. **RESTful API设计**:API用于客户端和服务器之间的通信,理解...
3. **代码理解**:对于没有源代码或不熟悉的遗留项目,MaintainJ能够快速建立业务流程模型,使开发者能快速上手,理解代码的逻辑结构和业务流程,缩短熟悉代码的时间。 4. **序列图生成**:序列图是UML的一种,显示...
这款插件的核心功能是支持模型设计和逆向工程,帮助开发者将抽象的业务逻辑转化为可视化的类图,同时也能够从已有的源代码中提取出结构信息,生成相应的类图,以辅助理解和重构代码。 一、UML与ModelGoon UML是一...
- **IDE的重要性**:优秀的IDE(如IntelliJ IDEA、Eclipse等)提供了丰富的代码编辑和调试功能,使得开发者能够更专注于业务逻辑而非繁琐的技术细节。 - **辅助工具**:版本控制系统(如Git)、自动化构建工具(如...
建模是软件工程中的关键活动,它可以帮助我们理清系统的结构和行为。 2. **UML语言**:UML是一种通用的、可视化的建模语言,支持面向对象的主要概念,如类、对象、接口、继承、聚合等,但它是过程无关的,可以应用...
这包括理解问题的上下文,比如代码的运行环境、业务逻辑以及可能的异常情况。Java程序员应该熟悉其代码库,了解各个类和方法的功能,以及它们之间的相互作用。对于复杂问题,画出类图、序列图或者状态图等可以帮助...