【问题标题】:Android - DataSource vs RepositoryAndroid - 数据源与存储库
【发布时间】:2021-03-09 22:30:57
【问题描述】:

在谈论 MVVM 或 MVI 等设计模式时,您会听到很多人谈论存储库和数据源。我一直在为 Retrofit 和 API 调用之类的东西创建存储库,为 Firebase 或其他库之类的东西创建数据源。但我不能 100% 确定我了解 Android 世界中数据源和存储库之间的区别。

有人可以请教我吗?

提前致谢。

【问题讨论】:

    标签: android kotlin mvvm repository datasource


    【解决方案1】:

    正如上一个答案所指出的,通过guide to app architecture可以帮助理解数据源和存储库之间的关系。

    以下是上述指南中有用的引述,以阐明这种关系:

    Repository 模块处理数据操作。他们提供了一个干净的 API,所以 应用程序的其余部分可以轻松检索此数据。他们知道 从哪里获取数据以及在数据存储时调用什么 API 更新。您可以将存储库视为之间的中介 不同的数据源,例如持久模型、网络服务和 缓存。

    您在问题中提到的内容(改造、firebase 等)都是不同的数据源。您可以从方程式中删除存储库并单独处理所有数据操作。但是存储库模块充当不同数据源和应用程序其余部分之间的抽象层。

    【讨论】:

    • 非常感谢,这让一切都清楚了,我之前认为数据源和存储库处于同一级别,而实际上存储库位于视图模型和数据源之间。再次感谢。
    • 当我们在这里时,如果我们按照上面的示例进行操作,是否应该将 FirebaseDataSource 和 RetrofitApi 接口都注入到存储库中?或者我应该只将一个数据源类注入到 repo 中,并将改造接口注入到数据源中?所以 Repository(retrofitApi, firebaseDataSource) 或 Repository(RemoteDataSource(retrofitApi, firebase))
    • 这听起来像是一个品味问题,或者至少取决于您的用例。如果您想添加一个额外的中介来管理您的远程数据源,这没有问题。虽然,如果在将数据传递到存储库之前没有太多的逻辑,您还不如直接将它们注入到存储库并在那里处理所有操作。
    【解决方案2】:

    存储库是视图模型用来获取数据的 API。存储库可以访问数据源并决定从何处获取数据。请参阅 Android 的Guide to app architecture.

    【讨论】:

    • 感谢您提供此图表。我现在可以清楚地看到不同了!
    猜你喜欢
    • 2012-07-24
    • 2015-12-31
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多