Честно говоря, я думаю, что в любом случае все в порядке, но если мне нужно выбрать, я предпочитаю хранить связанный с потоками код на уровне хранилища. ( Версия A в примере)
Мое оправдание:
(A) Представление Модели не должны предполагать, как репозитории внутренне работают. Версия B подразумевает, что модель представления предполагает, что репозиторий будет работать в вызывающем потоке.
(B) Кроме того, хранилище не должно зависеть от других компонентов, использующих определенный поток для вызова своего метода. Хранилище должно быть завершено само по себе.
(C) Чтобы избежать дублирования кода. Наличие нескольких моделей View, вызывающих один метод репозитория, - очень распространенная ситуация. Версия A выигрывает в этом случае, потому что вам нужен только Corountine
в одном месте, хранилище.
Я предлагаю взглянуть на некоторые примеры Google, чтобы узнать, где им нравится обрабатывать Coroutine
и коды доступа к данным.
Подсолнух использует код Coroutine
в своем хранилище. Это, вероятно, особенно полезно для вас, поскольку содержит примеры запросов типа «забей и забудь».
GitHubBrowserRepo не использует Coroutine
, но в хранилище хранятся ссылки на Executor
экземпляров, которые используются при доступе к данным.