具有多个远程数据源的存储库模式

Repository pattern with multiple remote data sources

我最近开始学习 Android 开发,犯了创建神活动的错误。然后我学习了架构,并选择将我现有的代码重构为 MVP 架构。到目前为止一切顺利,但我的下一个瓶颈是使用存储库模式。我了解存储库本质上是演示者调用以获取数据的抽象。它优雅地处理何时使用远程数据源或本地数据源、缓存等。

但是如果需要多个数据源呢?例如,我从 Firebase Firestore 存储和提取大部分数据,但对于复杂的查询和搜索,我从 ElasticSearch 实例中提取数据(通过 REST 通过 Retrofit)。这两个都是 远程 数据源。

因此,我的存储库不是这样的:

public class BookRepository implements BookDataSource {

    private final BookDataSource remoteSource;
    private final BookDataSource localSource;

    public BookRepository(@NonNull BookDataSource remoteSource,
                          @NonNull BookDataSource localSource){
        this.remoteSource = remoteSource;
        this.localSource = localSource;
    }
}

看起来像这样:

public class BookRepository implements BookDataSource {

    private final FirebaseFirestore firestore;
    private final Retrofit retrofit;
    private final SomeLocalSource local;

    public BookRepository(@NonNull FirebaseFirestore firestore,
                          @NonNull Retrofit retrofit,
                          @NonNull SomeLocalSource local){
        this.firestore = firestore;
        this.retrofit  = retrofit;
        this.local     = local;
    }
}

如您所见,我传递的内容改变了结构,如果我将来要移动到不同的数据库,我将不得不在使用存储库的所有地方进行重构。 我怎么能improve/fix这个?

我提供了一个流程的小图:

我确定可能有更好的解决方案,但我只是引入了另一层抽象