1

我有一个 Java 类,其方法在我的应用 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 中调用,但现在我需要通过传递我从应用程序项目(前端)获得的 sessionTrackingId 来进行一种重构以使用第二种方法。

API 是另一个像 Java 库 .jar 一样使用的项目,我需要将此参数传递给第二种方法。

我怎样才能做到这一点?也许在第一个方法的每次调用中向接口添加一个新的抽象类?

4

3 回答 3

1

我会简单地内联第一个方法,无论它在哪里被调用。现在你的调用者都在调用第二个方法,第三个参数为空。找到它被调用的任何地方,并将 null 替换为调用上下文中适当的任何内容。

于 2013-10-01T18:18:52.477 回答
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
        ....
    }
}
于 2013-10-08T21:22:40.570 回答
0

这种事情属于门面门面模式的范畴。并且是很好的做法。关键是在方法签名之间保留尽可能多的代码。您对问题的描述有点难以解释,目前尚不清楚您实际上是在尝试添加标题中建议的第三个参数。

我基本上同意卡尔的观点。您将在默认未提供的参数时添加方法签名。请意识到“内联”在 Java 中不是开发人员的责任,而是留给 JVM。

于 2013-10-02T14:53:24.413 回答