MVVM - 这个逻辑的最佳层是什么?

3
我正在使用MVVM架构和Retrofit获取图像。现在我想添加一些功能,比如图像编辑、压缩和上传。
我的问题是:对于MVVM架构,这些功能的业务逻辑是否是用例?
domain: usecase - ImageCompressionUseCase.kt - UploadImageUseCase.kt ui: - ImageCompressionViewModel.kt - ImageCompressionFragment.kt - UploadImageViewModel.kt - UploadImageFragment.kt
我的想法是它们属于用例,但我还有点犹豫 :)
ImageCompressionUseCase.kt
@Singleton
class ImageCompressionUseCase @Inject constructor(@ApplicationContext private val context: Context) {

    suspend operator fun invoke(name:String) : Result<File> = runCatching {

        withContext(Dispatchers.IO){

            val output = File(context.filesDir,"$name.png")

            // some logic to image compression

            output
        }
    }
}

ImageCompressionViewModel.kt

@HiltViewModel
class ImageCompressionViewModel @Inject constructor(private val imageCompressionUseCase: ImageCompressionUseCase) : ViewModel() {

    private val _isLoading = MutableLiveData<Boolean>()
    val isLoading get() = _isLoading

    private val _data = MutableLiveData<Result<File>>()
    val data get() = _data

    fun start(){
        viewModelScope.launch {
            _isLoading.value = true

            _data.value = imageCompressionUseCase("example_name")

            _isLoading.value = false
        }
    }
}

你说得对,如果是业务逻辑的话,它就是一个用例。 - Shark
1个回答

4

你说得对——用例是用于单个功能内完成单个操作的。你的功能——压缩、编辑和上传照片——代码应该尽可能地放在使用案例中,每个操作最好只有一个使用案例。

之前在 ViewModel 中完成的纯 MVVM 现在在使用案例中完成。

这样做可以使代码易于理解,并且您还可以在不必复制代码的情况下在不同的ViewModel中使用压缩或编辑功能的使用案例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接