You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

重复代码重构为便利重载函数的模式命名咨询

重构模式:便捷重载(Convenience Overloads)

问题场景:重复代码异味

最初的代码中,多个查询函数存在重复的前置逻辑:getCategories和getBoundaryData都重复实现了getConfiguration里的配置查询逻辑,属于典型的**重复代码(Duplicated Code)**代码异味,增加了维护成本。

重构前代码:

static class Configuration {
    String site;
    List<Category> categories;
}
static class Category {
    String type;
    BoundaryData[] boundaryData;
}
static class BoundaryData {
    Double value;
    // 其他字段省略
}

public Configuration getConfiguration(String siteName) {
    if (siteName == null) return null;
    
    Optional<Configuration> configuration = listOfCategories.stream()
                                    .filter((c) -> c.getSite().equals(siteName))
                                    .findFirst();

    if (configuration.isEmpty()) return null;

    return configuration.get();
}

public Category getCategories(String siteName, String categoryType) {
    // 重复上述配置查询代码
    // 再执行分类查询逻辑
}

public BoundaryData getBoundaryData(String siteName, String categoryType, Double value) {
    // 重复配置和分类查询代码
    // 再执行边界数据查询逻辑
}

优化方案:便捷重载重构

通过语义化重命名函数(如findConfig),并让参数更丰富的重载函数内部调用参数更少的重载函数,复用前置逻辑,彻底消除重复代码:

重构后代码:

public Configuration findConfig(String siteName) {
    if (siteName == null) return null;
    
    Optional<Configuration> configuration = listOfCategories.stream()
                                    .filter((c) -> c.getSite().equals(siteName))
                                    .findFirst();

    if (configuration.isEmpty()) return null;

    return configuration.get();
}

public Category findConfig(String siteName, String categoryType) {
    Configuration config = findConfig(siteName);
    if (config == null) return null;
    
    Optional<Category> category = config.getCategories().stream()
                                    .filter((c) -> c.getType().equals(categoryType))
                                    .findFirst();

    if (category.isEmpty()) return null;

    return category.get();
}

public BoundaryData findConfig(String siteName, String categoryType, Double value) {
    Category category = findConfig(siteName, categoryType);
    if (category == null) return null;

    Optional<BoundaryData> boundaryData = Arrays.stream(category.getBoundaryData())
                                    .filter((c) -> c.getValue() > value)
                                    .findFirst();

    if (boundaryData.isEmpty()) return null;

    return boundaryData.get();
}

模式说明

这种重构模式叫做便捷重载(Convenience Overloads),它是针对重复代码异味的具体优化手段:通过提供参数数量不同的同名函数,既为调用者提供了更灵活的调用入口(无需手动逐层查询),又在内部复用前置逻辑,避免了代码重复,提升了代码的可维护性。

内容的提问来源于stack exchange,提问作者yadav_vi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 18:15:21