android – MVP RxJava – 将调度程序放在Presenter或Interactor中?

我正在开发一个带有MVP和Rx
Java
Android应用程序.好吧,我有一个疑问:

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

演示者中的调度程序

主持人:

 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建议在Interactor中设置Scheduler.你可以在这个链接中看到这个:

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的工作只是获取数据,但也许我错了……)

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

但是,就像我的意见一样……

点赞