mvvm android 中的存储库可以是单例吗?

Sat*_*ngh 2 android repository mvvm

我对 mvvm 中的存储库不太了解,也看过多个博客和代码模板。它们中的每一个都与其他的不匹配。所以

  1. 为什么需要有多个 Repositories 类?为什么单个存储库不应处理应用程序的所有数据输入输出?

  2. 为什么存储库不应该是项目中的 SINGLETON 类?

  3. 存储库(的方法)应该向 viewmodel 结果(密封类)或来自 api(如列表)(或错误)的实际响应提供什么?

  4. SharedPrefences 也应该由存储库处理吗?如果没有为什么

    我相信存储库应该是代码的一部分,它应该处理来自多个源的所有数据,无论是数据库、网络还是共享首选项。所以你怎么看?

Dan*_*aid 5

  1. 存储库的目的不仅是管理请求/响应,而且还提供一个层来分隔职责。如果您有 2 个模块(假设登录和注册),那么最好将存储库分开以保持干净和简单,而不是使用带有意大利面条代码的单个存储库。

  2. 这一点是有主见的。在我看来,您可以拥有单例存储库,因为它们是无状态的,即它们不保存任何可能导致多个 ViewModel/模块之间发生冲突的数据。

  3. 取决于你,但返回 Result 会更好。使用 Result,您可以轻松处理成功、失败和错误消息,并直接从存储库返回不同的错误消息,而不是在 ViewModel 中决定显示什么消息。消息可以来自服务器或内部异常消息。

  4. SharedPreferences 是一个数据源。是的,您可以使用存储库模式管理首选项。