【发布时间】:2019-01-25 20:43:39
【问题描述】:
我有一个基于 MVP + 交互器 + 存储库的 Android 应用程序。从存储库到演示者的所有层都使用反应流(RxJava 2)连接。查看从演示者请求某些内容,演示者从交互者请求,交互者从存储库请求,以及从 API 本身请求存储库。响应通过与从 API 到 Presenter 的反应流相同的层。每一层都可以为底层映射数据。
问题是。我应该在哪里调用 subscribeOn(io()/computation()/etc) 和 observeOn(AndroidSchedulers.mainThread()) ? 我认为应该从演示者调用observeOn(AndroidSchedulers.mainThread()),因为可以在交互器中执行繁重的计算。 在许多示例中 subscribeOn(io()/computation()/etc) 是从演示者调用的,但我不同意这种方法。我认为演示者不应该决定在哪个线程中加载数据。存储库应决定在哪个线程中从 API 加载数据。 例如,如果我们有存储库接口来加载联系人。一个实现可以从数据库或互联网或内存存储中获取数据。无需为内存存储库创建线程。所以仓库应该决定是否订阅 io/computation/etc 调度器。
有什么想法吗?
【问题讨论】:
-
在我的开放中,多线程的东西与模型和逻辑无关。它们可能因平台而异,因此我在表示层中设置了流的调度程序。
-
同意@Malv,它与架构无关。通常我会订阅视图并观察演示者中的 api 响应。
标签: android rx-java2 mvp clean-architecture