UseCase与Kotlin协程:构建高可维护的Android异步架构
在电商应用的订单处理流程中,当用户点击"立即购买"按钮时,系统需要同时完成库存校验、优惠券核销、支付预创建三个操作。传统实现可能会在ViewModel中编写嵌套的回调地狱,而采用UseCase与协程的组合,可以将这段逻辑简化为:
viewModelScope.launch {
val deferredStock = async { stockUseCase.check(itemId) }
val deferredCoupon = async { couponUseCase.verify(couponId) }
val results = awaitAll(deferredStock, deferredCoupon)
paymentUseCase.create(
itemId = itemId,
stockToken = results[0],
couponToken = results[1]
).collect { state ->
_uiState.value = when(state) {
is Loading -> OrderState.Progress
is Success -> OrderState.Success(state.data)
is Failed -> OrderState.Error(state.error)
}
}
}
1. UseCase在Android架构中的定位演进
Android官方架构引入Domain Layer(领域层)的核心理念在于关注点分离。在传统的MVVM模式中,ViewModel常常沦为"上帝类"——既处理UI状态管理,又承担业务逻辑,最终导致:
- 单个文件代码量超过800行
- 单元测试需要模拟过多依赖
- 相同逻辑在不同ViewModel中重复出现
UseCase作为领域层的核心组件,具有三个典型特征:
- 无状态性:不持有可变状态,类似纯函数
- 单一职责:每个UseCase只完成一个具体业务动作
- 可组合性:可通过依赖注入复用其他UseCase
class TrackDeliveryUseCase @Inject constructor(
private val repo: DeliveryRepository,
private val formatDate: FormatDateUseCase // 组合其他UseCase
) {
suspend operator fun invoke(orderId: String): Flow<DeliveryStatus> {
return repo.fetchTracking(o

470

被折叠的 条评论
为什么被折叠?



