【问题标题】:Where should I chain multiple network requests in MVVM? UseCases or Repository?我应该在哪里链接 MVVM 中的多个网络请求?用例还是存储库?
【发布时间】:2019-10-15 22:19:18
【问题描述】:

我正在重构我们的代码库。现在我们有一个单例存储库,它处理网络请求并管理与 RxJava 和 Kotlin 协程链接的操作符。

但是,Repository 被注入到多个 ViewModel 中并且变得更难维护。

我想抽象我们的代码库并集成一些用例。据我所知,在 useCase 中使用单个网络请求是普遍的看法,这就是为什么我不确定链接网络请求的原因。

我需要使用 Observable.zip 和 RxJava Subjects 链接多个网络请求。

以下流程是否正确?

Viewmodel 调用 useCase,它创建网络请求(来自存储库)、处理该网络请求、创建 LiveData 并将该 LiveData 转发到 ViewModel 并从存储库更新主题,以便 Repository 在所有网络请求完成后发出一些数据

然后我们的存储库仍然与我们当前的方法相似,代码更少,并且只负责多个网络请求链接。

我希望我已经足够清楚了。我研究了多个 MVVM 示例,但它们对于具有复杂网络逻辑的实际应用程序似乎并不实用。

【问题讨论】:

    标签: android mvvm rx-java2 android-architecture-components android-livedata


    【解决方案1】:

    您不应在存储库中链接不同的 API 调用。映射到更复杂的域对象应该在用例中完成。通常有多个存储库,每个存储库负责业务领域模型的某些部分(例如 UsersRepository、PostsRepository 等)。用例可以依赖于多个存储库。

    Example (Plaid app)

    【讨论】:

    • 是的,我也对 Plaid 应用进行了很多研究。问题是我需要在多个 ViewModel 中观察 API 链接的结果。据我所知 useCase 应该用于一个 ViewModel。还是我说的不对?
    • 是的,单个用例实例应该由一个视图模型使用(您必须为每个视图模型提供相同用例类的单独实例)但是 API 链接到底是什么意思?
    • 例如,我们发出 4 个网络请求,我们需要观察它们,然后从用户想要的任何视图模型创建新的网络请求。
    • 创建发出 4 个请求的用例或组件。然后在每个视图模型中调用该用例并等待结果(如果您使用 RxJava,它可能是一个 Observable),然后再调用下一个用例。
    • 谢谢!然而,还有一件事。没有同时调用 4 个网络请求。只有在特定的用户交互之后。那我还应该听从你的建议吗?这确实有道理:)
    猜你喜欢
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2013-12-15
    • 1970-01-01
    • 2010-09-12
    相关资源
    最近更新 更多