使用 ViewModel 的接口?
Posted
技术标签:
【中文标题】使用 ViewModel 的接口?【英文标题】:Using interfaces for ViewModels? 【发布时间】:2019-03-02 08:45:36 【问题描述】:我目前正在根据官方文档和google提供的示例应用程序(向日葵和todo-app)将架构组件集成到我的应用程序中。我意识到这些都没有使用 ViewModels 的接口(向日葵应用程序甚至不使用存储库的接口)。
我的问题是:省略ViewModels的接口是否合理(包括优点和缺点)?
【问题讨论】:
【参考方案1】:省略ViewModels的接口是否合理?
以下内容非常笼统,不仅适用于ViewModels。
优势:
更少的代码缺点:
将无法使用大多数知名设计模式; 将无法正确地对类进行单元测试(无模拟); 将无法正确使用依赖注入框架; 使用其他具体实现时的代码重构。【讨论】:
我知道这不是问题的一部分,但是命名这样一个接口的最佳方式是什么?假设我有一个 TasksViewModel 类并想为它创建一个接口 @Doflaminhgo,按照开发人员使用的命名约定,您可以将它们命名为 1)TasksViewModel
用于接口,TasksViewModelImpl
用于具体实现或 2) ITasksViewModel
用于接口,TasksViewModel
用于具体实施。真的只是口味问题。【参考方案2】:
答案取决于您的 ViewModel 的复杂性。如果您永远不会创建多个接口的实现(包括模拟),则无需创建接口,因此您可以减少代码和整体维护负担。
也就是说要考虑的重要事项是:
即使没有界面,您能否对视图模型进行单元测试(答案应该是肯定的,否则 IMO 会遇到一些其他问题) 你还能使用依赖注入框架吗(答案是肯定的,至少对于 Prism 等一些 DI 框架) 您是否只打算创建一个 ViewModel 实现?我认为,一个设计良好的 ViewModel 的标志应该是具有相对简单的实现,并且易于进行单元测试而不必诉诸模拟。
【讨论】:
以上是关于使用 ViewModel 的接口?的主要内容,如果未能解决你的问题,请参考以下文章
Android Jetpack架构组件(三)—ViewModel