Страницы

Поиск по вопросам

понедельник, 8 апреля 2019 г.

В каком слое нужно реализовывать логику выбора источника данных (локальные данные или сеть)?

В каких случаях Domain слой (бизнес-логика) может знать о существовании разных источников данных? Например, у меня есть такой код:
GetUserUseCase {
UserRepository userRepository;
GetUserUseCase(UserRepository userRepository) { //... }
public Observble getUser(int id) { return Observable.merge(userRepository.getLocal(id), userRepository.getRemote(id)); }
}
т.е. мой репозиторий может отдавать данные из двух источников. Насколько это корректно с точки зрения "Чистой архитектуры"?
Это простой пример, у меня есть более сложные кейсы, когда мне необходимо точно знать из какого источника получены эти данные. Должен ли я пересмотреть свою архитектуру таким образом, чтобы UseCase не знал о разных источниках, т.е. у меня в репозитории был бы один метод getUser(), или это нормальная ситуация?


Ответ

Зависит от требований к приложению, глобально есть два подхода:
1) Умный репозиторий Тогда это на уровне репозитория, а интерактор только просит данные. То есть бизнес логика без понятия откуда и как получены данные. А репозиторий управляет всеми кешами.
2) Глупый репозиторий Репозиторий только знает как достать и как сохранить данные, а интерактор сам говорит откуда и когда. А также именно интерактор решает когда сохранять, очищать данные и так далее
Обычно на практике более прост первый подход, так как пользователю и логике приложения не известно про локальные кеши и прочее.

Комментариев нет:

Отправить комментарий