我认为无论哪种方式都是诚实的,但如果我必须选择,我更喜欢在存储库层中保留与线程相关的代码。 ( 版本A. 在示例中)
我的理由:
(A)视图模型不应假设存储库内部如何工作。 版本B 意味着View Model假定Repository将在调用线程上运行。
(B)此外,存储库不应依赖于其他组件来使用特定线程来调用其方法。存储库应该是完整的。
(C)避免代码重复。让多个View模型调用一个存储库方法是一种非常常见的情况。 版本A. 在这种情况下获胜是因为你只需要 Corountine 在一个地方,存储库。
Corountine
我建议您查看一些Google示例,了解他们希望处理的内容 Coroutine 和数据访问线程代码。
Coroutine
向日葵 使用 Coroutine 其存储库中的代码。这可能对您特别有用,因为它包含了“即发即弃”类型的请求示例。
GitHubBrowserRepo 不使用 Coroutine 但是存储库仍然引用了 Executor 访问数据时使用的实例。
Executor