Android中的存储库模式单界面

Android中的存储库模式单界面,android,repository-pattern,Android,Repository Pattern,在研究了几篇关于这个主题的博客文章后,我感到困惑,因为不同的开发人员有不同的实现,但他们都使用了存储库的单一接口 假设,我们有以下存储库接口 interface Repository<T> { fun get(): List<T> fun save(items: List<T>) } 接口存储库{ fun get():列表 乐趣保存(项目:列表) } 对于使用T=Users,repository.get()的此存储库的特定实现,请从服务器下

在研究了几篇关于这个主题的博客文章后,我感到困惑,因为不同的开发人员有不同的实现,但他们都使用了存储库的单一接口

假设,我们有以下存储库接口

interface Repository<T> {
    fun get(): List<T>
    fun save(items: List<T>)
}
接口存储库{
fun get():列表
乐趣保存(项目:列表)
}
对于使用
T=Users
repository.get()
的此存储库的特定实现,请从服务器下载一些数据并将其缓存

对于另一种类型的对象,比如说
Bundles
,我不仅需要这些方法,还需要一些额外的方法,例如查询本地数据库中的特定列

在这种情况下,我无法理解,我是否需要创建一个单独的接口或向现有的单个接口添加方法,在这种情况下,我应该如何在不需要这些方法的其他存储库中实现新方法?所有存储库必须具有相同的接口。我个人认为,为不同的存储库创建多个接口是可以的,只要我能很好地抽象它们

我需要创建一个单独的接口还是向现有的单个接口添加方法

你可以做任何你喜欢的事。Android对存储库一无所知,也没有任何限制

在我的工作中,我并没有首先创建一个通用接口(就像您展示的那个)。我想不出有哪一个项目是开发人员创建了通用存储库接口的。我确信有些人确实创建了这样的接口,但操作系统并不要求这样的接口

我个人认为,为不同的存储库创建多个接口是可以的,只要我能很好地抽象它们


欢迎你这么做。

天哪!可能是因为几乎所有的博客文章都只为一个用例创建了存储库而引起的混淆。@mallaudin:blog文章有其局限性。书籍示例也是如此。:-)确切地我想的是,如果我们真的不想在多个存储库中编写相同的方法,我们仍然可以使用通用方法创建顶级接口,然后为特定存储库创建其他接口。你觉得这种方法怎么样?@mallaudin:如果你觉得这样做有价值,那就好了。就个人而言,我不喜欢为了拥有接口而创建接口。对于一个庞大的多模块项目,这可能是合适的,以帮助在模块之间保持一定程度的隔离。或者,如果有一个可插拔的存储库系统,消费者可以在其中获得不同的实现,那么接口是合适的。但是,对于只有一个接口实现的小型项目来说,“所有存储库都需要接口”有点过头了。@mallaudin:一个例外是,如果您的测试代码(例如,模拟生成器)需要接口才能正常工作。在这种情况下,您的界面是用来支持特定库的。请注意,您的问题非常接近“主要基于意见”的封闭投票解释所涵盖的内容。我试图从技术的角度回答您的问题。我在回答中详细讨论了通用存储库的优缺点。