我正在使用MVVM架构的改进来获取图像.现在我想添加一些功能,如图像编辑或压缩和上传.

我的问题是.对于MVVM体系 struct ,这些特性的业务逻辑是一个用例吗?

  • 领域

    • 使用 case
  • 用户界面

    • ImageCompressionViewModel.千吨级
    • 图像压缩片段.千吨级
    • 上载ImageViewModel.计算机断层扫描
    • 上载ImageFragment.计算机断层扫描

我的大脑说这是用例,但我有点犹豫:)

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.千吨级

@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
        }
    }
}

推荐答案

您是对的-用例用于在单个功能中完成的单个操作.您的特性-压缩、编辑和上传照片-代码应该包含在用例中,最好是每个操作都包含在一个用例中.

以前普通MVVM在ViewModel中所做的工作现在在用例中完成.

这样,代码就很容易理解,您还可以在不同的ViewModel中使用压缩或编辑功能用例,而无需复制代码.

Android相关问答推荐

使用RecycleView和Diffutils时从列表中删除项目时出现问题

Lateinit变量结果始终以kotlin格式未初始化

数据绑定在Android中等待填充值时显示未填充的值

如何解决Gradle构建错误:java.lang.NoSuchMethodError

升级到 Jetpack Compose 物料 list 2023.08.00 需要我将 targetSdk 更改为 34

如何在卡片视图右侧添加箭头

Gradle在我的Android Compose项目中继续推广依赖版本

我可以从 Android 中的选定文本中获取周围的文本吗?

为什么@PrimaryKey val id: Int? = null 在创建 Room 实体时有效吗?

Jetpack Compose:如何绘制异形边框?

Kotlin Multiplatform Mobile targetSdk 已弃用

如何在 BasicTextField 中全选焦点

Jetpack Compose Material3 - switch 标签

关于launchWhenX和repeatOnLifecycle的问题

线圈单元测试 - 如何做到这一点?

Android全屏AlertDialog

基线配置文件 x R8/Proguard

使用 Jetpack Compose 的深层链接导航到可组合项

如何在 Kotlin 中使用反向绑定适配器将小写文本转换为大写?

单击后退按钮时,应用程序会在一秒钟后崩溃