多个视图的一个 ViewModel 或单个视图的多个 ViewModel?
One ViewModel for multiple Views or multiple ViewModels for a single View?
我正在开发一个 Android 应用程序来训练演奏者的耳朵,让他们在吉他上重放他们从 phone 听到的任何声音。我通过以下方式制作了音符(和弦)识别部分:一个显示信息并收听按钮的主线程,一个 AsyncTask
记录声音并发送要分析的数据,另一个 AsyncTask
分析并确定演奏了哪些音符。
音符识别是实时的,所以我把 Analyzer AsyncTask
放在了 ViewModel
里。已识别的音符和和弦保存在 LiveData
字段中,因此每当它们发生变化时,都会通知主线程(由 View
表示)。
现在我正在开发一款使用这种识别的游戏,但我也打算制作一个调谐器。游戏和调谐器将使用相同的识别算法。
我的问题是:我应该如何处理这个问题? 游戏和调谐器也将拥有自己的功能。我应该将分析器 ViewModel
与单独的 game 和 tuner ViewModels
分开吗?这意味着我会为这两个 Views
中的每一个使用两个 ViewModels
。我认为我不应该在两个单独的 ViewModels
中重复分析器代码,也不应该为 game and[ 编写函数=44=]对于tuner在同一个ViewModel
,因为会有无用的代码(game永远不会使用个别调谐器 功能)。
你可能应该在你的 Model
中使用你的通用识别算法(或者甚至在一些独立于 Model
的服务层),而不是在你的 ViewModel
。 ViewModel
被绑定到 View
,而不是执行像笔记识别这样的业务逻辑。
在这种情况下,ViewModel
将负责将录音发送到 Model
,后者将它们保存为 LiveData
对象。 ViewModel
检索它们并将它们公开给 View
作为 LiveDataViewModel
对象。
我正在开发一个 Android 应用程序来训练演奏者的耳朵,让他们在吉他上重放他们从 phone 听到的任何声音。我通过以下方式制作了音符(和弦)识别部分:一个显示信息并收听按钮的主线程,一个 AsyncTask
记录声音并发送要分析的数据,另一个 AsyncTask
分析并确定演奏了哪些音符。
音符识别是实时的,所以我把 Analyzer AsyncTask
放在了 ViewModel
里。已识别的音符和和弦保存在 LiveData
字段中,因此每当它们发生变化时,都会通知主线程(由 View
表示)。
现在我正在开发一款使用这种识别的游戏,但我也打算制作一个调谐器。游戏和调谐器将使用相同的识别算法。
我的问题是:我应该如何处理这个问题? 游戏和调谐器也将拥有自己的功能。我应该将分析器 ViewModel
与单独的 game 和 tuner ViewModels
分开吗?这意味着我会为这两个 Views
中的每一个使用两个 ViewModels
。我认为我不应该在两个单独的 ViewModels
中重复分析器代码,也不应该为 game and[ 编写函数=44=]对于tuner在同一个ViewModel
,因为会有无用的代码(game永远不会使用个别调谐器 功能)。
你可能应该在你的 Model
中使用你的通用识别算法(或者甚至在一些独立于 Model
的服务层),而不是在你的 ViewModel
。 ViewModel
被绑定到 View
,而不是执行像笔记识别这样的业务逻辑。
在这种情况下,ViewModel
将负责将录音发送到 Model
,后者将它们保存为 LiveData
对象。 ViewModel
检索它们并将它们公开给 View
作为 LiveDataViewModel
对象。