(这个问题同样适用于MVC和其他模式,但我目前正在开发基于MVVM的应用程序。)
在MVVM模式中; View直接作用于ViewModel,ViewModel直接作用于Model,后者通知View绑定到的ViewModel。因此,更改请求从View传播到Model,并作为View的更新返回。
你为什么不做以下事?查看发出更改请求通知。 ViewModel接收通知并发出自己的更改请求通知。模型接收通知,更改并发出更改的通知。 ViewModel收到此消息并发出自己更改的通知。 View收到此信息并进行更新。
这听起来更复杂(每次更改四次通知)但实现了100%的图层分离,并允许任意数量的模型连接到View(反之亦然)。
注意:如果您使用RxSwift或其他机制代替通知,则同样的问题也适用。
你所说的完全正确。 (而且它并不复杂)。
根据模型更改,基本上是在讨论模型具有一个不同模块的依赖关系。 (例如从设备获取联系人,或者服务器收到的推送或......)。另一方面,这就是这种行为试图描述的内容,您所说的是描述用户触发操作的行为(例如重新加载,按钮点击或......)。
另一方面,它取决于您如何实现ViewModel。由于实施ViewModel没有任何经验法则,因此每个团队或个人以不同方式实施它。有些实现了ViewModel中的整个Logic,而Model尽可能愚蠢。有些实现ViewModel尽可能愚蠢,只将View连接到Model,反之亦然。
我自己,通常将ViewModel实现为逻辑,尽可能将Model设置为哑,并将我的分色应用于合成。 (一个ViewModel可能连接到不同的ViewModel和...)。
我可以轻松地将我的ViewModel连接到CI,我的项目仍然有效。 (因此我可以为所有这些编写单元测试,UI测试,集成测试)