【发布时间】:2022-01-21 09:51:58
【问题描述】:
假设您想实现一个存储库模式来处理应用程序的数据。 映像您有两个数据源:
- 本地缓存(或数据库)
- 远程服务(Rest API)
该服务不允许进行更改,只允许检索数据,因此数据源的一个非常简单的接口可以是
interface DataSource {
suspend fun getClients(): Result<List<Client>>
suspend fun getClient(): Result<Client>
}
remoteDataSource 和 cacheDataSource 都会实现它。
但是,cacheDataSource 需要填充数据,所以它需要一个额外的功能,比如暂停乐趣addClients(clients: List<Client>),所以我可以将界面更改为:
interface DataSource {
suspend fun getClients(): Result<List<Client>>
suspend fun getClient(): Result<Client>
suspend fun addClients(clients: List<Client>)
}
但这会很糟糕,因为remoteDataSource 不会实现 addClients。
所以我可以从该接口中删除该函数并让cacheDataSource 实现另一个接口:
interface CacheClients {
suspend fun cacheData(clients: List<Client>)
}
现在的问题是,我的存储库应该只接收两个 DataSource 实例,但不知道 cacheDataSource 正在实现的另一个接口。
您认为在这种情况下最好的方法是什么?
【问题讨论】:
标签: android design-patterns repository-pattern android-architecture-components