多个视图的一个 ViewModel 或单个视图的多个 ViewModel?

One ViewModel for multiple Views or multiple ViewModels for a single View?

我正在开发一个 Android 应用程序来训练演奏者的耳朵,让他们在吉他上重放他们从 phone 听到的任何声音。我通过以下方式制作了音符(和弦)识别部分:一个显示信息并收听按钮的主线程,一个 AsyncTask 记录声音并发送要分析的数据,另一个 AsyncTask 分析并确定演奏了哪些音符。

音符识别是实时的,所以我把 Analyzer AsyncTask 放在了 ViewModel 里。已识别的音符和和弦保存在 LiveData 字段中,因此每当它们发生变化时,都会通知主线程(由 View 表示)。

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

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

你可能应该在你的 Model 中使用你的通用识别算法(或者甚至在一些独立于 Model 的服务层),而不是在你的 ViewModelViewModel 被绑定到 View,而不是执行像笔记识别这样的业务逻辑。

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