【问题标题】:MVP + RxJava - Put the Schedulers in the Presenter or in the Interactor?MVP + RxJava - 将调度程序放在 Presenter 中还是在 Interactor 中?
【发布时间】:2017-05-29 12:00:12
【问题描述】:

我正在使用 MVP 和 RxJava 开发一个 Android 应用程序。好吧,我有一个疑问:

当我创建我的演示者和交互者时,我可以将调度程序放在演示者中,如下所示:

Presenter 中的调度程序

演讲者:

 override fun tryLogin(username: String, password: String) {
                mLoginInteractor.login(username, password)
                        .subscribeOn(Schedulers.newThread())
                        .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(object : Subscriber<User>(){
        [...]
        }

登录交互器:

override fun login(username: String, password: String) =
 mRetrofit.create(ApiClient::class.java).login()

或者我可以在交互器中设置调度程序,如下所示:

交互器中的调度器

演讲者:

 override fun tryLogin(username: String, password: String) {
                mLoginInteractor.login(username, password)
                        .subscribe(object : Subscriber<User>(){
        [...]
        }

登录交互器:

    override fun login(username: String, password: String) =
     mRetrofit.create(ApiClient::class.java).login()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())

我看到 Google 建议在交互器中设置调度程序。您可以在此链接中看到:

https://github.com/googlesamples/android-architecture/tree/todo-mvp-rxjava/

但是很多人把代码放在Presenter里面,比如这个例子:

https://github.com/BoydHogerheijde/Android-MVP-example/blob/master/app/src/main/java/nl/bhogerheijde/example/rxmvp/interactor/Interactor.java

那么,我是在 Presenter 中还是在 Interactor 中设置调度器

(我认为放入 Presenter 是一个更好的主意,因为 Intractor 的工作只是获取数据,但也许我错了......)

【问题讨论】:

    标签: android architecture rx-java kotlin mvp


    【解决方案1】:

    如果你想拥有良好的可组合性,我建议你尽可能晚地指定你的调度器(除非必要);这通常意味着在订阅之前。这样你就可以重用 f.e. login() 在另一个流中,而不必一直跳线程。

    然而,这就像,只是我的意见......

    【讨论】:

      【解决方案2】:

      如果您要对演示者进行单元测试,您可能应该将调度程序放在交互器中,因为subscribeOn() 一个(大部分时间)是与 android 相关的(因为主线程调度程序)并且您不会能够测试你的演示者(除非你模拟调度程序),如果它里面有 android 特定的类。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 2018-02-24
      • 2018-09-18
      • 1970-01-01
      • 2014-07-15
      相关资源
      最近更新 更多