Я новичок в kotlin сопрограмме, я разработал базовый вариант использования, мне нужно знать, хорош этот дизайн или плох. Пример:
abstract class BaseUseCase<T, in Params> {
private val foreGroundContext: CoroutineContext = Dispatchers.Main
private val backgroundContext: CoroutineContext = Dispatchers.IO
suspend fun execute(params: Params, block: Result<Block<T>>.() -> Unit) {
coroutineScope {
val response = ResultBlock<Block<T>>().apply { block() }
try {
withContext(foreGroundContext) {
response(true)
}
val result = withContext(backgroundContext) {
executeOnBackground(params)
}
withContext(foreGroundContext) {
response(result)
}
} catch (cancellationException: CancellationException) {
withContext(foreGroundContext) {
response(Exception(cancellationException))
}
} catch (exception: Exception) {
withContext(foreGroundContext) {
response(Block.Error<T>(error = Exception(exception)))
}
}
}
}
protected abstract suspend fun executeOnBackground(params: Params): Block<T>
}
И из моей модели просмотра я буду звонить из модели представления
class MyViewModel : ViewModel(){
fun testing() {
viewModelScope.launch {
someUseCase.execute(Params) {
start{}..complete{}..
}
}
}
Есть предложения по этому базовому сценарию использования?