Android:存储库模式和分页

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.再次,返回CompletablemoreArticles()看似怪异.这样可以,还是有更好的方法?