为什么 MVVM 中的 View 不应该告诉 ViewModel 做什么?
那些。为什么视图不应该是这样的,viewModel.loadData() 或 viewModel.updateData 或 viewModel.setName()
通常将 viewModel 的公共方法命名为:
fun nameChanged(name: String) fun updateDataRequested() 并在 ViewModel 内部决定如何对其做出反应..
有没有文章可以解释这一点?
为什么 MVVM 中的 View 不应该告诉 ViewModel 做什么?
那些。为什么视图不应该是这样的,viewModel.loadData() 或 viewModel.updateData 或 viewModel.setName()
通常将 viewModel 的公共方法命名为:
fun nameChanged(name: String) fun updateDataRequested() 并在 ViewModel 内部决定如何对其做出反应..
有没有文章可以解释这一点?
View 的任务是向用户显示应用程序的状态,以及通知应用程序用户的操作,即处理用户输入。
View Model 的工作是为 View 提供 View 可以访问的数据和 View 可以调用的命令。View Model 还会告诉 View 数据何时发生变化,以便后者及时将这些变化显示给用户。
Model 的任务是接收和发送数据。
好吧,为什么不呢?让我们想象一下
loadData()- 一个命令,viewmodel 的某个属性loadDataCommand,它本身包含一个方法execute()。您在 View 中声明对该命令的调用,例如单击按钮时。同时View也不知道命令执行的时候会发生什么,它只是打了个电话,就这样了。此外,视图模型本身会更改其数据并告诉界面发生了哪些变化。在这里,视图和视图模型解决的任务的性质出现了一条清晰的界限,我开始写答案。
View 知道视图模型在哪里有什么属性,知道命令在哪里,但它不知道这些命令做什么,当属性更新时,它订阅视图模型事件并等待。
这给了我们什么:
总结一下,我会说将应用程序划分为 3 层:表示层(View)、业务逻辑层(View-Model)和数据连接层(Model)——让几乎任何应用程序的开发都变得容易了 3 倍。而且这些层连接的越弱,修改应用就越方便。
您是否遇到过这样的情况:更改一个类中的代码需要更改应用程序中的另外 3 个位置?然后在测试过程中发现不是 3 个,而是 5 个地方,然后你去修复错误。这就是发明所有这些设计模式的原因——让开发人员的生活更轻松。
为了更容易理解如何组织应用程序对象模型并最终与 OOP 的三个原则交朋友,还发明了 SOLID 原则,这是对基本设计模式(如 MVVM)的一个很好的补充。