Я начал изучать разработку Android довольно недавно и совершил ошибку, создавая богослужения.Затем я узнал об архитектуре и решил преобразовать свой существующий код в архитектуру MVP.Пока все хорошо, но мое следующее узкое место - использование шаблона хранилища.Я понимаю, что хранилище - это, по сути, абстракция, которую докладчик вызывает для получения данных.Он изящно обрабатывает, когда использовать удаленный источник данных или локальный источник данных, кэширование и т. Д.
Но что, если требуется несколько источников данных?Например, я храню и извлекаю большинство данных из Firebase Firestore, но для сложных запросов и поиска я извлекаю данные (через REST через Retrofit) из экземпляра ElasticSearch.Оба они являются удаленными источниками данных.
Таким образом, вместо моего репозитория вот так:
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;
}
}
Как видите, то, что я передаюменяет структуру, и если бы в будущем я перешел на другую базу данных, мне пришлось бы проводить рефакторинг везде, где используется хранилище. Как я могу улучшить / исправить это?
Я предоставил небольшую диаграмму потока: