您更喜欢重复代码而不是实用程序 类?

Do you prefer repeating code instead of utility classes?

我们在 Java 中有一项服务处理大量用户上传的文件,以及为不同模型准备这些文件以供执行的任务。

其中一个准备阶段包括覆盖 json 文件中的值。 10 个任务中有 4 个应该这样做。

我创建了一个静态实用程序 class,其中包含一个函数来覆盖 json 文件中的值,例如

public static class ParameterUtils {
   public static String overrideParameter(String originalContent, String key, String newValue) {
     //4 lines of code that overrides this value and return modified content.
   }
}

然而,我的高级开发人员说这个实用程序 class 几乎没有提供任何价值,而我试图保留 DRY 原则。最后我确实摆脱了这个实用程序 class,现在用于覆盖 json 文件中的值的 4 行代码驻留在 4 个不同的文件中。

你认为这个class和方法从OOP的角度看不好吗?为什么以及为什么不?

不,在多个地方复制(稍微复杂的)代码绝对是不好的做法。

DRY 原则说 "Don't Repeat Yourself"。这是要记住的事情,您不想通过指示计算机多次覆盖此参数来重复自己。

但是,与只有一个方法的静态实用程序 class 相比,可能有更好的地方可以放置它。

如果您使用它的 4 个文件都扩展了某个 class,也许可以将其设为受保护的静态方法。或者将它放在 class 中 returns JSON 字符串中。

但是,将 JSON 作为字符串传递似乎有点代码味道,尤其是当您通过字符串操作来操作它时。使用 Jackson 或 org.json 等 JSON 库可能是个好主意。如果您使用 Jackson 的数据绑定功能(Jackson 最流行的使用方式),您可以创建一个具有实际 getter 和 setter 的 POJO,Jackson 会负责将其转换为 JSON。在 org.json 的情况下,您使用 JSONObject class,这与 Map<String, Object> 非常相似,并且您可以像对待地图一样改变它,并且可以转换它通过单一方法往返于 String。