gpt4 book ai didi

android - MVP + RxJava - 将调度器放在 Presenter 或 Interactor 中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:13:38 27 4
gpt4 key购买 nike

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

最佳答案

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

不过,这就像,只是我的意见......

关于android - MVP + RxJava - 将调度器放在 Presenter 或 Interactor 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41646040/

27 4 0