我最近开始学习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;
}
}
正如您所看到的,我传递的内容会改变结构,如果我将来移动到另一个数据库,我必须在使用存储库的任何地方进行重构。 如何改进/解决此问题?
我提供了一个流程图: