在MVVM中,ViewModel绝不能引用视图。但是如何使用Camera 2 API实现它呢?
对于相机设置,需要使用TextureView参数(例如<{>,例如TextureView.surfaceTexture
,TextureView.isAvailable
,TextureView.width
)。
我正在尝试将Camera2Basic example的逻辑放入ViewModel。
通过自定义cameraInit(...)
函数传递所需值是一种干净的解决方案,还是将代码保留在片段中更好?
答案 0 :(得分:2)
通常,作为MVVM的一部分,ViewModel是视图(片段)和模型之间的组件(在您的情况下,某些文件管理器将图像保存到文件中)。正如您已经提到的,ViewModel的最佳实践是不了解视图。考虑到这一点,ViewModel应该从视图(例如位图)接受一些数据,并将其传递给模型。您可以通过在Fragment中处理所有与视图相关的代码来实现此目的(或者,如果希望保持Fragment尽可能整洁,则可以使用一些处理相机的辅助类)并将其传递给ViewModel。
这样做的主要目的是可以通过简单的单元测试来测试ViewModel,而无需使用仪器。始终重要的是要知道使用MVVM或MVP之类的体系结构不会降低代码的复杂性,通常,由于您具有相同的逻辑和体系结构开销,因此复杂性甚至会增加。因此,您始终必须考虑是否值得应用MVVM(如果您无论如何都不想测试代码,并且类也不会很大,那将无济于事)。