У меня есть Android-приложение на основе MVP + интеракторы + репозитории. Все слои от репозитория до докладчика подключены с использованием реактивных потоков (RxJava 2). Просматривать запросы чего-либо от докладчика, докладчик запрашивает у интерактора, интерактор запрашивает из репозитория, а репозиторий запрашивает у самого API. Ответ проходит через те же слои, что и реактивный поток от API до докладчика. Каждый слой может отображать данные для нижележащего слоя.
Вопрос в том. Где я должен вызывать subscribeOn (io () / computation () / etc) и наблюдаем (AndroidSchedulers.mainThread ())?
Я думаю, что наблюдаю (AndroidSchedulers.mainThread ()) следует вызывать из докладчика, потому что в интеракторе могут выполняться тяжелые вычисления.
Во многих примерах метод subscribeOn (io () / computation () / etc) вызывается из докладчика, но я не согласен с таким подходом. Я думаю, что докладчик не должен решать, в какой поток загружать данные. Репозиторий должен решить, в какой поток загружать данные из API.
Например, если у нас есть интерфейс хранилища для загрузки контактов. Реализация может получать данные из БД или Интернета или в памяти. Нет необходимости создавать поток для хранилища в памяти. Таким образом, хранилище должно решить, подписываться на планировщик io / computation / etc или нет.
Есть идеи?