【问题标题】:Where to create the repository object in android apps?在 android 应用程序中在哪里创建存储库对象?
【发布时间】:2019-05-22 10:26:18
【问题描述】:

您如何以及在哪里创建您的 Android 应用程序中的存储库对象?

您是否将存储库实现为单件?是静态类吗?

我正在尝试使用单一活动方法:

显然我想在每个 ViewModel 中使用相同的存储库。但是您选择了哪种方法,或者哪种方法更有意义让您的存储库只存在一次并可以从任何地方访问它?

在 android 开发者示例中,他们在 mainactivity 中创建存储库对象,因为他们需要应用程序对象来创建存储库。但是在这个例子中,你不能从任何地方访问它,你可以出于同样的原因创建多个,例如处理 SQL。

【问题讨论】:

    标签: android-architecture-components android-jetpack android-mvvm


    【解决方案1】:

    您是否阅读过本指南Guide to app architecture?我想这会回答你的大部分问题。

    实际上,您不应该从任何地方访问存储库,而应该从 ViewModel 甚至从 UseCases(域层,看看 Clean Architecture)更好地访问。

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

    要管理组件之间的依赖关系,您可以使用一些 DI 库。

    【讨论】:

    • 我知道这个指南,但它是在 Kotlin 中的,我不明白。此外,如果您查看 Github 上的代码,它太复杂了。也许我有点不准确。 “无处不在”是指每个 ViewModel。让我们看一下codelab to room:codelabs.developers.google.com/codelabs/…。他们在 ViewModel 中创建了一个存储库实例:github.com/googlecodelabs/android-room-with-a-view/blob/master/…
    • 但这意味着他们可能有许多 ViewModel 并且每个都有自己的存储库实例,从而导致数据不一致。我错了吗?那么存储库不应该是单一的吗?那么所有 ViewModel 都使用相同的存储库实例吗?
    • 指南在 Kotlin 中,但重点是在那里获得架构。每个 ViewModel 都为特定的 UI 组件提供数据,比如一个屏幕。您有一个管理您的个人资料的屏幕,然后您有一个 ProfileViewModel。您有另一个管理订阅的屏幕,然后是 SubscriptionViewModel,等等……这就是关注点分离。如果您有一个结构良好的应用程序,那么您可以为所有视图模型使用相同的存储库,并且您将避免任何数据不一致。是的,你可以让它单身
    • 这是一个不错的轻量级项目github.com/PierceZ/GoogleArchitectureExample,基于 MVVM 的 java。看看
    • 好吧,在这个项目中 ZooRepository 是静态的,意味着可以从任何地方访问。您说:“实际上,您不应该从任何地方访问存储库,而应该从 ViewModel 甚至从 UseCases 访问存储库”
    猜你喜欢
    • 1970-01-01
    • 2010-10-24
    • 2014-01-14
    • 2011-03-04
    • 1970-01-01
    • 2013-11-20
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多