You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

访问同一仓库的两个用例如何避免重复API调用?

避免重复API调用的解决方案分析

问题背景

我有两个用例UseCase A和UseCase B,二者均访问同一仓库Repo X,Repo X会调用API接口data.com/getUserInfo获取特定数据。ViewModel 1仅需使用UseCase B,此时仅会发起一次API调用;而ViewModel 2需同时使用UseCase A和UseCase B,这会导致同一API被调用两次,但实际上一次调用就足够。我的问题是:如何避免ViewModel 2中多余的重复API调用?我想到的一种方案是将该API调用单独提取为一个UseCase,再将响应结果作为构造参数传入UseCase A和UseCase B,请问这种方案是否可行?仅封装API调用的UseCase是否合理?

你的方案可行性与合理性分析

  1. 方案可行性:完全可行。通过将API调用封装为独立的GetUserInfoUseCase,在ViewModel 2中先执行这个UseCase获取数据,再将结果传递给UseCase A和UseCase B,确实能确保API只调用一次。这种方式把数据获取和业务逻辑解耦,上层可以灵活控制数据的复用。
  2. 合理性:是合理的,但要根据场景判断是否最优。UseCase的核心职责是封装单一业务动作,纯API调用的UseCase本质是封装数据获取逻辑,属于合理的职责范围——尤其是当这个API调用逻辑(比如参数处理、请求头配置)有复用需求时,单独封装能减少重复代码。不过如果这个API调用逻辑非常简单,没有额外处理,这种封装可能会增加少量冗余,这时候可以考虑其他更轻量的方案。

其他可选优化方案

除了你的方案,还有几种更常用的方式可以避免重复调用:

  • 仓库层添加缓存逻辑:在Repo X中对getUserInfo的结果进行缓存(比如内存缓存、本地数据库缓存),当UseCase A和UseCase B先后调用仓库方法时,仓库先返回缓存数据,避免重复发起API请求。这种方案对上层ViewModel和UseCase完全透明,不需要修改它们的调用逻辑,是最常用的解耦方式。
  • 使用响应式流共享数据:如果项目使用Kotlin Flow或RxJava,可以让Repo X返回一个共享的数据流(比如shareIn创建的Flow),UseCase A和UseCase B订阅同一个数据流,这样API只会在第一个订阅者出现时调用,后续订阅者直接复用已有数据。
  • 依赖注入共享实例:如果UseCase A和UseCase B依赖的是同一个Repo X实例,且仓库本身没有缓存,可以考虑让ViewModel 2中共享同一个数据获取逻辑的实例,或者通过DI容器确保数据获取逻辑只执行一次。

总结

你的方案是可行且合理的,适合需要在ViewModel层明确控制数据流向的场景;而仓库层缓存或响应式流共享的方案则更适合希望上层逻辑无感知、自动复用数据的场景,可以根据项目的架构风格和实际需求选择。

内容的提问来源于stack exchange,提问作者kk_1807

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 13:01:02