首页 > 其他分享 >一个开发者的重构实践

一个开发者的重构实践

时间:2025-01-17 19:59:06浏览次数:1  
标签:重构 函数 检查 是否 代码 实践 注释 开发者

重构是一个适合小步慢走(或快跑)的过程。除了在编码开始前编码完成但未进行功能测试前,其他时间不适合进行大刀阔斧的重构。重构最好有单元测试作为保障,并且对重构的功能有充分了解。大的重构往往是通过一系列小的重构逐步浮现的,而且可能会出现反复。


1. 重构实践步骤

第一步:注释检查

  1. 是否利于阅读:注释应清晰易懂,帮助开发者快速理解代码意图。

  2. 检查注释是否充分:注释应补充代码无法表达的内容,而非重复代码逻辑。

  3. 是否存在多余的注释:如果代码本身已经足够清晰,可以去掉多余的注释。

    • 改进建议:如果代码需要注释才能理解,可能是代码的自注释性不足,建议优化代码。例如,将长的if条件替换为有意义的变量名。

  4. 注释是否与代码一致:确保注释与实际代码逻辑一致,避免误导。

  5. 是否有假设依赖条件需要特别说明:明确代码中的假设和依赖条件。

  6. 是否需要对框架、调用关系进行说明:如果代码涉及复杂的框架或调用关系,应通过注释说明。

  7. 是否有隐含的意图或信息未说明:检查是否有未明确的意图或信息,尽量通过代码自说明。


第二步:检查类、函数、变量命名

  1. 命名是否表达了含义:检查命名是否准确反映了其功能或用途。

  2. 命名风格是否一致:确保整个项目中的命名风格统一。

  3. 是否从名称中读出信息:在不阅读注释的情况下,是否能通过名称理解其含义。

  4. 类成员的调用是否规范:检查是否使用了thism_前缀、s前缀或::等命名规范。


第三步:检查方法的复杂度

  1. 方法嵌套是否太深:减少嵌套层次,提升代码可读性。

  2. 局部变量的声明与使用距离:确保局部变量在使用处附近声明,减少作用域。

  3. for循环中的重复操作:检查是否存在重复计算(如数组长度),避免性能浪费。

  4. 函数个数是否合适:避免函数过多或过少,保持合理的功能划分。

  5. 多个函数之间的变量位置是否一致:确保变量声明和使用的位置一致,减少混乱。

  6. 函数参数是否可以减少:尽量减少函数参数,简化调用。

  7. 函数注释是否合适:检查注释是否清晰,是否有助于理解函数逻辑。

  8. 是否可以使用简单参数替换对象或结构体:如果函数参数过于复杂,考虑简化。

  9. 是否含有可以去掉的局部变量:去掉不必要的局部变量,减少冗余。


第四步:检查函数的长度并进行拆分

  1. 方法长度是否过长:如果函数过长,考虑拆分为多个小函数。

  2. 相似代码的抽象:如果多个函数中有相似代码,抽象为通用函数。

  3. 函数是否太多或类是否太复杂:如果函数过多或类过于复杂,考虑是否需要进一步拆分。

  4. 通读函数,检查可读性:确保函数逻辑清晰,易于阅读。


第五步:检查相似类

  1. 找出相似类的共同点:识别相似类之间的共同特征。

  2. 抽象出基类:根据共同点,抽象出基类,减少重复代码。

  3. 抽象出公共函数:将相似类中的公共逻辑提取为通用函数。

  4. 修改子类继承基类:让子类继承基类,减少代码冗余。

  5. 代码可读性与继承的取舍:在继承和可读性之间找到平衡。

  6. 判断代码放置位置是否合适:将更通用的代码放在更通用的位置。


第六步:检查类成员的可见性

  1. 基类成员的可见性:检查基类成员的可见性是否合理(如privatepublic)。

  2. 所有类成员的可见性:确保类成员的可见性(privateprotectedpublic)符合设计意图。


第七步:查看多个类之间的关系

  1. 类之间的关系是否可以进一步抽象:检查类之间的关系,考虑是否可以通过抽象简化设计。

  2. 在可读性、抽象性、性能和效率之间抉择:在代码设计时,平衡可读性、抽象性、性能和开发效率。


第八步:请别人阅读代码,并提供意见

  • 代码评审:邀请同事或团队成员阅读代码,提供反馈意见。

  • 改进建议:根据反馈优化代码,提升代码质量和可维护性。


2. 重构的核心原则

  1. 小步快跑:重构应逐步进行,避免一次性大规模改动。

  2. 单元测试保障:在重构前,确保有充分的单元测试覆盖,避免引入新问题。

  3. 代码自说明:通过清晰的命名和结构,减少对注释的依赖。

  4. 持续优化:重构是一个持续的过程,随着需求变化不断优化代码。


3. 重构的注意事项

  1. 避免过度设计:重构应以解决实际问题为目标,避免过度抽象或复杂化。

  2. 保持功能不变:重构的核心是优化代码结构,而非改变功能。

  3. 记录重构过程:记录每次重构的改动和原因,便于后续维护和团队协作。


总结

重构是提升代码质量的重要手段,但需要遵循小步快跑、单元测试保障和持续优化的原则。通过注释检查、命名优化、方法拆分、类抽象等步骤,开发者可以逐步改善代码结构,提升可读性和可维护性。同时,邀请团队成员参与代码评审,能够进一步发现潜在问题,确保重构的有效性。希望本文的实践经验能为开发者的重构工作提供参考和启发。

标签:重构,函数,检查,是否,代码,实践,注释,开发者
From: https://www.cnblogs.com/Rong-/p/18677599

相关文章

  • 重构经历_编写代码生成器
    我的重构经历:编写代码生成器概述背景多年前,我开发了一个基于C#的Windows程序——代码生成器,并在此后十多年间持续优化。该程序能够根据数据库表结构生成代码,并将结果显示在文本框中。最初是从同事那里接手的一个简单项目,经过不断扩展和重构,最终实现了通过数据库自动生成具备完......
  • 对需求的理解与实践
    一、什么是好的需求需求的质量重于数量:需求并非越多越好,也并非越详细越好。一个好的需求应属于一系列关联需求的一部分,这些需求共同支撑一个发布版本,并为用户提供明确的价值。验收条件:每个需求应有明确的验收条件,达到这些条件即视为需求完成。可讨论与不可讨论的部分:需求......
  • 【书籍连载】《软件测试架构实践与精准测试》 川模型组织架构分析
    各位软件领域的精英们,今天小编邀请你继续深入学习《软件测试架构实践与精准测试》。《软件测试架构实践与精准测试》是作者李龙(安畅检测首席技术专家)基于软件测试“川模型”的著作。本书结合作者首次提出的软件测试新的模型“川模型”测试架构,并与精准测试理念相结合的方式,......
  • 深入理解第三范式(3NF):数据库设计中的重要性与实践
    title:深入理解第三范式(3NF):数据库设计中的重要性与实践date:2025/1/17updated:2025/1/17author:cmdragonexcerpt:在数据库设计中,规范化是确保数据完整性、减少冗余和提高查询效率的关键过程。第三范式(3NF)作为关系数据库设计的高级规范,建立在前两范式(1NF和2NF)的......
  • 洞察用户需求:人资系统设计的核心要素与实践
    随着企业规模的不断扩大和组织架构的日益复杂,人力资源管理系统(HR系统)已经成为企业管理的重要工具。作为企业用户,我们对人资系统的需求不仅仅是简单的人员信息管理,更需要它能够适应企业内部复杂的部门、岗位和人员关系,帮助我们高效地进行人力资源规划和管理。以下从用户角度出发......
  • 文档协作赋能创意团队提效实践
    一、引言:团队协作的挑战在设计行业中,团队协作是项目成功的基石。从头脑风暴到最终交付,设计师团队需要在每个环节中保持一致性与高效沟通。然而,由于团队分布、沟通延迟以及版本管理混乱,协作过程往往充满摩擦。多人协同编辑文档技术正成为解决这些问题的重要工具。通过让团队成员......
  • Spark 源码解析(二) 根据 SparkRpc 自己动手实践一个跨节点通信
     目录一、框架流程:二、Maven搭建Scala导入POM依赖三、根据流程进行编写1、实例 Master2、创建 RpcEnv3、创建RpcEndpoint4、生成RpcEndpointRef5、RpcEndpointRef发送消息 6、防止还没收到消息程序就结束运行7、验证一下,看看结果四、完整代码一、框架......
  • LLM大模型实践12-评估输入—分类
    简介本章聚焦评估输入任务的重要性,其对系统质量与安全性意义重大。处理多种独立指令集任务时,先对查询类型分类,再据此确定所用指令,好处众多。实现方式是定义固定类别,硬编码特定类别任务相关指令。比如构建客户服务助手,查询类型分类及指令确定尤为关键:用户要求关闭账户,二级......
  • LLM大模型实践14-处理输入-思维链推理
    语言模型在回答问题时匆忙下结论易在推理链中出错,“思维链推理”策略要求语言模型先给出相关推理步骤、深度思考后再给答案,更接近人类解题思维。此方法能减少语言模型匆忙犯错,生成更准确可靠的响应,是提升回答质量的重要策略。本章将探讨如何处理语言模型输入以生成高质量输出,......
  • 在线客服系统 QPS 突破 240/秒,连接数突破 4000,日请求数接近1000万次,.NET 多线程技术的
    背景我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统。陆陆续续开发了几年,从一开始的偶有用户尝试,到如今的QPS突破240次/秒,连接数突破4000,日请求数接近1000万。(PS:阿里云真贵啊)在这篇文章中,我将简要介绍我在技术上做了哪些工作,我是如何做到的。PS:虽......