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

时间:2013-10-24 04:23:43

标签: api design-patterns static global-variables facade

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

静态全局变量(OLD CODE)的示例:

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();
}

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

3 个答案:

答案 0 :(得分:0)

我认为你不能把它称为FACADE。

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

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

答案 1 :(得分:0)

静力学使得单元测试变得困难。

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

答案 2 :(得分:0)

你可以尝试一些IoC容器。我会为你制作“单身人士”,其中一些甚至还有“自动接线”。