在 MVVM 中,ViewModel 绝不能引用 View 。但是如何使用 Camera 2 API 实现呢?
对于相机设置,需要 TextureView 参数(例如 TextureView.surfaceTexture
、TextureView.isAvailable
、TextureView.width
).
我正在尝试从 Camera2Basic example 中添加逻辑到 ViewModel。
通过自定义 cameraInit(...)
函数传递所需值是干净的解决方案还是将该代码保留在 fragment 中更好?
最佳答案
一般来说,作为 MVVM 的一部分,ViewModel 是您的 View ( fragment )和模型(在您的情况下是一些文件管理器,用于将图像保存到文件)之间的组件。正如您已经提到的,ViewModel 的最佳实践是对 View 一无所知。考虑到这一点,ViewModel 应该从 View 中接受一些数据(例如位图)并将其传递给模型。您可以通过处理 Fragment 中所有依赖于 View 的代码(或者如果您想让 Fragment 尽可能保持干净,则处理相机的一些辅助类)并将其传递给 ViewModel 来实现这一点。
这样做的主要目的是可以在不需要仪器的情况下使用简单的单元测试来测试您的 ViewModel。知道使用 MVVM 或 MVP 等架构不会降低代码的复杂性始终很重要,通常情况下,复杂性甚至会增加,因为您具有相同的逻辑加上架构的开销。由于这个事实,您总是必须考虑是否值得应用 MVVM(如果您无论如何都不想测试您的代码并且类也不会太大,那么它不会有太大帮助)。
关于android - 没有引用 View with Camera 2 的 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51708531/