Eli*_*as 6 android kotlin rx-java2
最近,我已经了解了在设计应用程序的后端(存储库,而不是服务器端后端)时拥有单一来源(SSOT)的重要性.https://developer.android.com/topic/libraries/architecture/guide.html
通过开发新闻提要应用程序(使用awesome https://newsapi.org/),我试图了解有关应用程序架构的更多信息.但是,我不确定如何实现分页.顺便说一下,.:我正在使用MVVM作为我的表示层.View订阅了ViewModel的LiveData.ViewModel订阅了RxJava流.
我提出了以下方法:
interface NewsFeedRepository {
fun getNewsFeed(): Observable<List<Article>>
fun refreshFeed(): Completable
fun loadMore(): Completable
}
Run Code Online (Sandbox Code Playgroud)
ViewModel订阅getNewsFeed()
Observable,它在每次数据库中的基础数据(SSOT)发生更改时发出数据.但是,我的问题是关于这个loadMore()
方法.此方法尝试从API加载更多文章,并在成功时将它们插入本地数据库.这会导致getNewsFeed()
发出新的Feed数据.
我的问题:
1.存储库是否应负责同步API和本地数据库数据?或者存储库是否应该使用一些管理同步网络/本地数据的"低级"API?
2.该方法loadMore
返回一个Completable
看似奇怪/误导的方法.是否有更好的方法在存储库界面中指示分页?
3.分页意味着存储当前页数并在从API请求数据时使用它.应该在哪里存储当前页数?在存储库中?或者在存储库使用的某些"低级"组件中?
interface SearchArticleRepository {
fun searchArticles(sources: List<NewsSource>? = null, query: String? = null): Flowable<List<Article>>
fun moreArticles(): Completable
}
Run Code Online (Sandbox Code Playgroud)
此存储库用于搜索文章.该方法moreArticles()
尝试根据最后一次调用从API加载更多文章searchArticles(...)
.例如:ViewModel调用repo.searchArticles(q = "bitcoin")
.调用repo.moreArticles()
尝试"bitcoin"
从API 加载包含查询字符串的更多文章并与本地数据库同步.
我的问题再一次:
1.是否可以存储有关上一个请求的信息(searchArticles(request)
在存储库中?我也可以考虑传递请求参数moreArticles()
,例如moreArticles(sources: List<NewsSource>? = null, query: String? = null)
.这样,存储库不必存储有关上一个请求的信息.
2.再次,返回Completable
在moreArticles()
看似怪异.这样可以,还是有更好的方法?
归档时间: |
|
查看次数: |
930 次 |
最近记录: |