一个ViewModel用于多个视图,还是多个ViewModel用于单个视图?

时间:2020-02-09 10:54:30

标签: android mvvm android-asynctask

我正在开发一个Android应用程序,可以训练演奏者的耳朵,方法是使他们通过吉他重播,无论他们从电话中听到什么。我通过以下方式制作了音符(和弦)识别部分:显示信息并收听按钮的主线程,记录声音并发送要分析的数据的AsyncTask,以及另一个{{1} }分析并确定已演奏了哪些音符。

笔记识别是实时的,因此我将分析器AsyncTask放在了AsyncTask中。识别出的音符和弦保存在ViewModel字段中,因此,每当它们更改时,都会通知主线程(由LiveData表示)。

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

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

1 个答案:

答案 0 :(得分:1)

您可能实际上应该在您的 Model 中(甚至在某些独立于Model的服务层中)使用通用识别算法,而不是在您的 { {1}} ViewModel被绑定到ViewModel,而不执行诸如便笺识别之类的业务逻辑。

在这种情况下,View将负责将记录发送到ViewModel,将它们另存为Model对象。 LiveData检索它们并将它们作为ViewModel对象暴露给View

相关问题