我有一个Java类,其方法在我的app API中高度耦合,如下所示:
public class ProductModel {
public static Product createProduct(ProductType productType, String comment) {
return createProduct(productType, comment, null);
}
public static Product createProduct(ProductType productType, String comment, Long sessionTrackingId) {
// Here now need sessionTrackingId Long
// But this method is never called
....
}
}
第一种方法在许多类和我的API项目(业务)和我的应用程序项目(前端)中调用。第二种方法只是在同一个类ProductModel中调用,但现在我需要通过传递我从app项目(前端)获取的sessionTrackingId来做一种重构来使用第二种方法。
API是另一个像Java库.jar一样使用的项目,我需要将此参数传递给第二个方法。
我该怎么做?也许在第一个方法的每个调用中向接口添加一个新的抽象类?
答案 0 :(得分:1)
我会简单地在第一个方法内联它,它被调用。现在你的调用者都在调用第二个方法,第三个参数为null。找到它被调用的所有地方,并用调用上下文中适当的任何内容替换null。
答案 1 :(得分:0)
这种事情属于立面facade pattern的范畴。这是很好的做法。关键是在方法签名之间保留尽可能多的代码。 您对问题的描述有点难以理解,但您实际上并未尝试按照标题中的建议添加第三个参数。
我大多同意卡尔的观点。您可以在默认不匹配的参数的同时添加方法签名。请注意,“inlining”不是Java中的开发人员责任,而是留给JVM。
答案 2 :(得分:0)
由于这个方法是高度耦合的,我使用单例模式解决了这个问题,并在会话启动时设置了这个值,并在方法调用中使用它:
public class ProductModel {
public static Product createProduct(ProductType productType, String comment) {
return createProduct(productType, comment, Application.getSessionTrackingId());
}
public static Product createProduct(ProductType productType, String comment, Long sessionTrackingId) {
// Here now need sessionTrackingId Long
// But this method is never called
....
}
}