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