当前位置: 首页 > article >正文

重构代码之添加参数

添加参数 是代码重构中的一种基本技巧,适用于需要让方法能够接受更多信息来处理某些操作或完成新的需求的情况。这个技巧特别适合那些参数列表尚未复杂、可以通过增加少量参数使得代码逻辑更清晰的场景。添加参数可以提高方法的灵活性和复用性,但需要小心避免造成过长的参数列表,以免代码变得难以维护。

一、适用场景

  1. 方法需要新的输入:当前方法的参数不足以处理新的逻辑需求。
  2. 方法内的硬编码值:当方法中包含具体数值、路径等常量时,适合把这些信息提取为参数,使得方法更通用。
  3. 为未来扩展提供灵活性:新增参数使方法能够处理多种输入情况,增强了代码的扩展性。

二、添加参数的步骤

  1. 识别需求:找到需要新增参数的具体原因(例如新的业务逻辑)。
  2. 确定参数类型:根据需求定义新参数的类型和默认值。
  3. 修改方法签名:在方法定义中添加新参数,并确保其位置符合逻辑需求。
  4. 调整调用方:在所有调用此方法的地方传递新的参数值,以保证不会破坏现有功能。
  5. 测试:执行测试确保添加新参数后,方法依旧能正确执行且满足新需求。

三、示例

假设我们有一个简单的C#方法,用于计算矩形的面积,代码如下:

public double CalculateArea(double width, double height)
{
    return width * height;
}

现在,我们希望扩展这个方法,使它可以支持指定一个单位(如“平方米”或“平方厘米”)。我们可以通过“添加参数”来实现:

public double CalculateArea(double width, double height, string unit = "square meters")
{
    double area = width * height;
    Console.WriteLine($"The area is {area} {unit}.");
    return area;
}

在这个例子中,新增了一个unit参数来指定单位。我们还可以设置一个默认值,保证不传递unit参数时,默认单位是“square meters”。这样一来,这个方法的灵活性就大大增加了。

假设在程序的其他地方已经有了几个调用这个方法的地方:

double area1 = CalculateArea(5, 10);
double area2 = CalculateArea(3.5, 4.2);

添加unit参数后,调用方可以不需要做任何修改,因为unit有默认值“square meters”。当然,也可以选择指定单位:

double area3 = CalculateArea(2, 4, "square centimeters");

四、注意事项

  • 控制参数数量:如果方法的参数过多,可以考虑引入参数对象(Parameter Object)来简化调用。
  • 保持兼容性:若原方法被广泛调用,应使用默认值来保持向后兼容,避免新增参数影响现有功能。
  • 单一职责:如果一个方法需要太多参数,可能说明方法的职责过多,可以考虑将方法拆分成多个职责单一的方法。

添加参数 是一个常用且实用的重构技巧,可以增强代码的灵活性和可读性,但在使用时需考虑参数的数量和方法的复杂度,以免违背代码简洁的原则。


http://www.kler.cn/a/384615.html

相关文章:

  • Jest项目实战(4):将工具库顺利迁移到GitHub的完整指南
  • 履带机器人(一、STM32控制部分--标准库)
  • 数据库管理-第258期 23ai:Oracle Data Redaction(20241104)
  • 单链表反转
  • HarmonyOS第一课——DevEco Studio的使用
  • OpenHarmony 入门——ArkUI 自定义组件间的父子双向同步状态装饰器@Link语法(四)
  • [单例模式]
  • 【设计模式系列】桥接模式(十三)
  • LLMs之PDF:zeroX(一款PDF到Markdown 的视觉模型转换工具)的简介、安装和使用方法、案例应用之详细攻略
  • uniapp中使用原生ajax上传文件并携带其他数据,实时展示上传进度
  • 外包干了2年,快要废了。。。
  • [Element] el-table修改滚动条上部分的背景色
  • 科比投篮预测——数据处理与分析
  • ES6的Proxy到底是什么?
  • LINUX下的Mysql:Mysql基础
  • 前后端分离中台管理系统
  • BERT的中文问答系统28
  • Golang | Leetcode Golang题解之第540题有序数组中的单一元素
  • 面向对象技术简述(含设计模式)
  • Java项目实战II基于Spring Boot的便利店信息管理系统(开发文档+数据库+源码)
  • 代码随想录算法训练营第五十五天|图论理论基础
  • 从零开始了解数采(十二)——汽车锂电池板自动装配线数据采集方案
  • 离散无记忆信道
  • 鸿蒙生态的崛起
  • C++:红黑树
  • SpringMVC学习记录(二)之接收数据