Java代码重构实践与经验分享

4星 · 超过85%的资源 需积分: 12 41 下载量 173 浏览量 更新于2024-09-20 收藏 5KB TXT 举报
"Java代码重构经验总结,包括重构要求、工作内容及代码的不良味道" 在软件开发过程中,代码重构是一项至关重要的任务,它能够优化代码结构,提高代码的可读性和可维护性。以下是对Java代码重构的一些关键点的详细说明: 1. **重构要求**: - **安全性优先**:在对关键部分重构时,应首先创建一个演示(Demo),确保所有环节在测试环境中运行无误后再进行实际的系统集成。在周五或者临近下班前进行重构时需特别小心,改动后的代码要立即提交到版本控制系统(如CVS)并附上注释说明修改内容,通知团队成员。 - **接口测试**:重构前需进行接口测试,重构后代码必须通过接口测试,因为系统正在运行,未经测试的代码上线可能导致严重问题。要求小步迭代,每次改动都要进行测试,并能追溯更改。 - **文件备份**:提交到服务器时,备份原始文件为如`*.class.20060809.jeff`的格式,避免直接覆盖以降低风险。 - **优先级管理**:正常任务优先,重构不应成为延误工作的借口。 - **文档记录**:重构经验应形成文档,随时更新,每当添加功能、修复bug或复审代码时,都要考虑是否需要进行重构。 2. **重构的工作内容**: - **命名重构**:根据Java开发技术规范,调整不合理的类名、方法名等。 - **包和结构重构**:重新组织包结构,合并或细分以提升代码结构清晰度。 - **方法体重构**:提取长方法,提高代码复用性。 - **正确位置计算值**:避免在非所属类中进行计算和逻辑处理。 - **配置文件整理**:优化配置文件,使其更清晰、易读。 - **提高编码效率**:避免循环内部声明变量,减少循环内的判断,利用StringBuilder进行字符串拼接,使用连接池提高数据库访问效率,引入缓存机制。 - **删除无用文件**:及时清理不再使用的代码和资源。 - **日志整理**:优化日志记录,便于调试和追踪问题。 - **文档更新**:更新相关文档,确保与代码同步。 - **异常处理**:根据Java异常处理规范,正确捕获和处理异常。 3. **代码的不良味道(Bad Smells)**: - **过长方法**:如果一个方法过于复杂,需要提取新的方法来简化。 - **过小方法**:如果一个方法只包含一行代码,可以考虑合并。 - **重复代码**:消除冗余代码,提高代码复用。 - **类职责过多**:一个类应有单一职责,避免大而全的类。 - **硬编码**:避免在代码中直接使用常量,应使用配置文件或枚举等方式。 - **上帝类**:一个类包含太多方法,应拆分为多个类。 - **过度封装**:不必要的封装可能会增加复杂性。 - **数据对象与业务逻辑混合**:数据对象(如DTO)应仅用于数据传输,避免混入业务逻辑。 - **不良命名**:使用有意义的命名,避免模糊不清的缩写或过于抽象的名称。 - **异常处理不当**:正确使用异常处理,避免使用空的catch块或打印堆栈跟踪作为唯一的错误处理。 通过遵循这些重构原则和实践,可以显著提高代码质量,使项目更加稳定且易于维护。在进行重构时,始终保持警惕,确保每个步骤都是经过深思熟虑和充分测试的。
2010-08-08 上传
/* * 原始需求背景: * 网宿CDN要按月收取客户的服务费用,根据流量的大小、 * 服务的类型等,收取不同的费用,收费规则如下: * web应用:1000元/M * 流媒体应用:1000元/M*0.7 * 下载应用:1000元/M*0.5 * 月末打印报表时,要罗列每个用户每个频道的费用、客户总费用, * 还要打印该客户的重要性指数,重要性指数=网页流/100+下载流量/600; * * 需求变更场景: * 系统已经开发出来了,接下来,运维部门现在希望对系统做一点修改, * 首先,他们希望能够输出xml,这样可以被其它系统读取和处理,但是, * 这段代码根本不可能在输出xml的代码中复用report()的任何行为,唯一 * 可以做的就是重写一个xmlReport(),大量重复report()中的行为,当然, * 现在这个修改还不费劲,拷贝一份report()直接修改就是了。 * 不久,成本中心又要求修改计费规则,于是我们必须同时修改xmlReport() * 和report(),并确保其一致性,当后续还要修改的时候,复制-黏贴的问题就 * 浮现出来了,这造成了潜在的威胁。 * 再后来,客服部门希望修改服务类型和用户重要性指数的计算规则, * 但还没决定怎么改,他们设想了几种方案,这些方案会影响用户的计费规则, * 程序必须再次同时修改xmlReport()和report(),随着各种规则变得越来越复杂, * 适当的修改点越 来越难找,不犯错误的机会越来越少。 * 现在,我们运用所学的OO原则和方法开始进行改写吧。 */