重复代码重构为便利重载函数的模式命名咨询
重构模式:便捷重载(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
相关产品推荐
相关产品推荐

