MVP + RxJava - 将调度器放在 Presenter 或 Interactor 中?
MVP + RxJava - Put the Schedulers in the Presenter or in the Interactor?
我正在使用 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 建议在交互器中设置调度程序。你可以在这个 link:
中看到
https://github.com/googlesamples/android-architecture/tree/todo-mvp-rxjava/
但是很多人把代码放在Presenter里面,像这个例子:
那么,我是在 Presenter 中还是在 Interactor 中设置调度程序?
(我认为放入 Presenter 更好,因为 Intractor 的工作只是获取数据,但也许我错了...)
如果你想有好的可组合性,我建议你尽可能晚地指定你的调度器(除非必要);这通常意味着在订阅之前。这样你就可以重用f.e。 login()
在另一个流程中,而不必一直 thread-hop。
不过,这就像,只是我的看法...
如果您要对演示者进行单元测试,您可能应该将调度程序放在交互器中,因为 subscribeOn()
一个(大部分时间)与 android 相关(因为主要thread scheduler) 并且你将无法测试你的演示者(除非你模拟调度程序)如果它有 android 特定的 类 里面。
我正在使用 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 建议在交互器中设置调度程序。你可以在这个 link:
中看到https://github.com/googlesamples/android-architecture/tree/todo-mvp-rxjava/
但是很多人把代码放在Presenter里面,像这个例子:
那么,我是在 Presenter 中还是在 Interactor 中设置调度程序?
(我认为放入 Presenter 更好,因为 Intractor 的工作只是获取数据,但也许我错了...)
如果你想有好的可组合性,我建议你尽可能晚地指定你的调度器(除非必要);这通常意味着在订阅之前。这样你就可以重用f.e。 login()
在另一个流程中,而不必一直 thread-hop。
不过,这就像,只是我的看法...
如果您要对演示者进行单元测试,您可能应该将调度程序放在交互器中,因为 subscribeOn()
一个(大部分时间)与 android 相关(因为主要thread scheduler) 并且你将无法测试你的演示者(除非你模拟调度程序)如果它有 android 特定的 类 里面。