android - 一个 ViewModel 用于多个 View 还是多个 ViewModel 用于单个 View ?

标签 android mvvm android-asynctask

我正在开发一款 Android 应用程序,该应用程序可以训练玩家的耳朵,让他们用吉他重放从手机中听到的任何内容。我按以下方式制作了音符(和和弦)识别部分:一个显示信息并监听按钮的主线程,一个记录声音并发送要分析的数据的 AsyncTask 以及另一个AsyncTask 分析并确定已演奏的音符。

注释识别是实时的,因此我将分析器 AsyncTask 放置在 ViewModel 中。识别的音符和和弦保存在 LiveData 字段中,因此每当它们发生变化时,主线程(由 View 表示)就会收到通知。

现在我正在开发一款使用这种识别的游戏,但我也打算制作一个调谐器。游戏和调音器将使用相同的识别算法。

我的问题是:我应该如何处理这个问题? 游戏调谐器也将拥有自己的功能。我应该将分析器 ViewModel 与单个游戏调谐器 ViewModel 分开吗?这意味着我将为这两个 Views 中的每一个使用两个 ViewModels。我认为我不应该在两个单独的 ViewModels 中重复分析器代码,而且我也不应该为游戏 对于同一ViewModel中的调谐器,因为会有无用的代码(游戏永远不会使用单独的调谐器> 功能)。

最佳答案

实际上,您应该在您的模型中使用通用识别算法(甚至在独立于模型的某些服务层中),而不是在您的 ViewModel 中。 ViewModel 旨在绑定(bind)到 View,而不是执行笔记识别等业务逻辑。

在这种情况下,ViewModel 将负责将录音发送到 Model,后者将它们保存为 LiveData 对象。 ViewModel 检索它们并将它们作为 LiveDataViewModel 对象公开给 View

关于android - 一个 ViewModel 用于多个 View 还是多个 ViewModel 用于单个 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60135851/

相关文章:

android - ViewModel onChanged 获取无限循环

java - 在 android xml 的图形布局中正确显示 CustomViews

c# - 如何正确定义 Model 到 ViewModel 的关系?

java - 为什么我们要从存储库返回实时数据? (MVVM 安卓)

android - 在 AsyncTask 中获取/使用 Context 的最佳方式是什么?

java - 尽管有错误,你可以强制编译吗

java - 如何从 fragment 调用 Activity 方法?

wpf - MVVM 和事件

android - 在 Meteor 上进行 Junit 测试,Android-DDP 库

java - 由于 Firebase 数据库调用导致 UI 延迟