Страницы

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

среда, 5 февраля 2020 г.

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

#android #архитектура


В каких случаях Domain слой (бизнес-логика) может знать о существовании разных источников
данных? Например, у меня есть такой код:

GetUserUseCase {

    UserRepository userRepository;

    GetUserUseCase(UserRepository userRepository) { 
       //... 
    }

    public Observble getUser(int id) {
        return Observable.merge(userRepository.getLocal(id), userRepository.getRemote(id));
    }

}


т.е. мой репозиторий может отдавать данные из двух источников. Насколько это корректно
с точки зрения "Чистой архитектуры"?

Это простой пример, у меня есть более сложные кейсы, когда мне необходимо точно знать
из какого источника получены эти данные. Должен ли я пересмотреть свою архитектуру
таким образом, чтобы UseCase не знал о разных источниках, т.е. у меня в репозитории
был бы один метод getUser(), или это нормальная ситуация?
    


Ответы

Ответ 1



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

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

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