我正在使用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相关问答推荐

操作系统会终止已启动的服务并调用“Service.onDestroy”吗?

如何在 flow.stateIn() 之后从流中的另一个函数发出emits ?

如何使在库范围之外无法访问的接口的具体实现.?

Android:如何获取具有纬度和经度的位置的图像

OpenGLES,为什么 glReadPixels() 不能从 FBO 的 Renderbuffer 的 colored颜色 缓冲区中读取数据?

如何从 Sqlite 获取最后一条记录?

禁用用户在 BottomSheet 上拖动

如何在没有 Android 手机中烦人的对话框的情况下使用语音识别

android 片段 onRestoreInstanceState

以编程方式更改 Activity 的主题

Android - 如何打印出完整的堆栈跟踪?

IntentService 和 Service 有什么区别?

在 Android Studio 中添加外部库

将视图转换为位图而不在 Android 中显示?

EditText 中带有 numberDecimal inputType 的小数分隔符逗号 (',')

渲染问题在渲染过程中引发异常:com.android.ide.common.rendering.api.LayoutlibCallback

onConfigurationChanged 没有被调用

Android Studio 将 R 标记为红色,并带有错误消息“无法解析符号 R”,但构建成功

我可以使用 react native 构建 Android 应用程序吗?

如何在 Android 上的 textview 或 imageview 上设置涟漪效果?