使RxBleClient非静态有什么意义?

时间:2017-11-29 17:08:45

标签: android rxandroidble

在RxAndroidBle示例应用程序中,Application类是:

public class SampleApplication extends Application
    private RxBleClient rxBleClient;
    /**
     * In practise you will use some kind of dependency injection pattern.
     */
    public static RxBleClient getRxBleClient(Context context) {
        SampleApplication application = (SampleApplication) context.getApplicationContext();
        return application.rxBleClient;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        rxBleClient = RxBleClient.create(this);
        RxBleClient.setLogLevel(RxBleLog.DEBUG);
    }
}

由于我们保证只有Application的一个实例,并且我们只需要RxBleClient的一个实例,因此编写起来更简单:

public class SampleApplication extends Application {

    private static RxBleClient rxBleClient;
    public static RxBleClient getRxBleClient() {
        return rxBleClient;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        rxBleClient = RxBleClient.create(this);
        RxBleClient.setLogLevel(RxBleLog.DEBUG);
    }
}

更复杂的方法有什么好处? 什么是"某种依赖注入模式"?我们能看到一个例子吗?再次,有什么好处?

1 个答案:

答案 0 :(得分:1)

正如Marcos Vasconcelos所说,第一种方法可能稍微容易测试,尽管它不是一个好的设计。

Dependency injection是一种获取可测试代码的方法,可以通过(例如)在构造时提供(模拟)依赖项来进行彻底测试。

要查看依赖注入的示例,您可以转到sources of RxAndroidBle并查看类的设计方式。

一个例子可能是RxBleConnectionImpl class,它有很多依赖注入。由于可以为它创建extensive test suite

RxAndroidBle示例应用程序是作为易于理解的示例编写的。它不一定遵循最佳模式,因为这些并不总是容易遵循。该示例的主要目标是显示库API的用法。