【发布时间】:2020-03-25 21:24:24
【问题描述】:
我有一些超级相似的方法,除了每个方法中的 1 行。我试图避免重复代码并在我的代码中应用良好实践,但我不是 OOP 专家。除了 1 次调用之外,这两种方法都是相同的:
例如:
classa.java
public static void updateTable() throws Exception {
List<T> newSchema = AvroToHive.generateSchema(...);
...
}
classb.java
public static void updateTable() throws Exception {
List<T> newSchema = AWSGlue.generateSchema(...);
...
}
我想将方法 updateTable() 移动到另一个公共类,并避免在我的项目中使用类似的方法。
什么是避免它的正确方法?我是否应该使用generateSchema 方法编写类似“Metastore”的接口,将其实现到 AvroToHive/AWSGlue 类中并将其作为参数传递,例如:
public static void updateTable(Metastore metastore) throws Exception {
List<T> newSchema = metastore.generateSchema(...);
...
}
【问题讨论】:
-
谁拥有这张桌子?
-
如果 classA 和 classB 不拥有一个表,那么也许某种表管理器是有意义的,它将处理 updateTable。传入 Metastore 的想法对我来说似乎是个好设计。对我来说,它看起来像是依赖注入,但通常,在我见过的所有依赖注入示例中,它都会涉及存储 Metastore 对象。我认为你的设计会像这样很好。