代码重构

403 阅读2分钟

「这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战

前言

接下来我们可能会有一个新的产品规划,就是把目前的项目整体重构,架构师和技术负责人已经在做技术方案了。他们的考量应该是基于整体的,但是最终大部分精力还是会落到具体代码上。刚刚看到了一个讲代码重构思想的文章,跟大家分享一下。

if/else、switch/case

我们的业务代码中会经常要处理这样的逻辑:在每种条件下处理不同的逻辑,比如分别处理两个数的加减乘除。最常见的写法:

public int calculate(int a, int b, String operator) {
    int result = Integer.MIN_VALUE; 
    if ("add".equals(operator)) { 
        result = a + b; } 
    else if ("multiply".equals(operator)) {
        result = a * b; } 
    else if ("divide".equals(operator)) {
        result = a / b; } 
    else if ("subtract".equals(operator)) {
        result = a - b; } 
    return result; 
}
// 或者用switch/case
switch (operator) { 
    case "add": result = a + b; 
    break; 
    // other cases 
} 
return result;

思路

上面这些是最基础的写法,那像这种基础代码如何重构呢?有很多重构方法可以用来解决这个问题,接下来是一些思路:

  • 工厂类
    • 定义一个操作接口
    • 实现操作
    • 实现操作工厂
    • 在方法中调用
  • 枚举
    • 定义枚举类
    • 在方法中调用 枚举适合于类型固定,可枚举的情况;同时枚举中是可以提供方法实现的,所以可以选择通过枚举进行重构。
  • 命令模式
    • command接口
    • 实现command
    • 在方法中调用
  • 规则引擎
    • 定义规则
    • add规则
    • 表达式
    • 规则引擎 规则引擎适合规则很多且可能动态变化的情况;
  • 策略模式 策略模式定义了算法族,分别封闭起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

综述

上面这些思路的实现代码在那篇文章中都有例子,但是在实际开发中,要考虑折中,业务和代价的折中、开发和维护的折中。期待我们的项目重构尽快提上日程啊!