我正在维护一个遗留的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 容器。我将为您制作"单例",其中一些甚至具有"自动布线"。