API 设计:全局变量与传递对象



我正在维护一个遗留的SDK。SDK 对于不同的平台,其行为会有所不同。它使用静态变量,并要求在任何 API 调用之前创建静态变量,如下所示:

静态全局变量示例(旧代码):

SDKContext.init();
VideoManager manager = new VideoManager();
public void VideoManager#search() {
    SDKContext.search();
}

像VideoManager这样的组件到处都是。我的直觉告诉我应该改用局部变量,但不能确定。

局部变量(我的首选方式):

SDKContext context = new SDKContext();
// Or even using singleton
SDKContext context = SDKContext.getInstance();
VideoManager manager = new VideoManager(context);
public void VideoManager#search() {
     context.search();
}

这两种方法的优缺点是什么?欢迎任何建议/建议。

我认为你不能称之为门面。

与常规方法相比,外观是API的简化版本,涵盖了下面更复杂的操作。在您的情况下,两种情况下的 API of VideoManager#search() - 您称之为非门面的那个,以及您声称是门面的那个 - 完全相同。此外,方法主体也几乎相同。用对象替换全局变量与作为外观没有任何共同之处,它只是您可以在实现过程中做出的决定。

全局变量(或单例)可以简化您的代码(在这种情况下,您需要将其传递到很多地方,值得一试),但代价是更难测试(模拟)它 - 决定取决于您。

静态使单元测试变得困难。

方法 2 要好得多。它对 IoC 友好且易于测试。

你可以尝试一些 IoC 容器。我将为您制作"单例",其中一些甚至具有"自动布线"。

相关内容

  • 没有找到相关文章

最新更新