Cyc*_*one 9 .net model-view-controller cocoa mvvm
我正在阅读MVVM并且在我的生活中无法分辨MVVM的"模型视图"与MVC中的"控制器"完全不同,如Cocoa编程中所使用的那样.
我甚至读过一些对别人来说应该是'aha'时刻的解释,但仍未能发现差异.我所做的有限的Cocoa GUI编程涉及将控制器作为管理从视图到模型的数据的中心点,使用键值观察.
在所有重要的方面,在我看来,"模型 - 视图"的作用除外,它可能是与.Net中的WPF < - > C#桥相关的微妙实现差异.也就是说,如果使用与应用程序代码不同的语言指定Cocoa GUI,则Cocoa中的MVC可能被称为MVVM,并且控制器使用与GUI相同的语言而不是应用程序进行编码(即,在XAML中指定WPF而不是C#).
或者在非Cocoa环境中的MVC,没有所有键值观察等,与在Cocoa中应用的MVC有很大不同,这导致人们发现MVVM和MVC之间存在比我更大的差异.
我疯了吗?请教育我.
Jas*_*onD 13
多年来我一直是WPF中MVVM的忠实粉丝,最近在Cocoa中获得了MVC.起初他们看起来很相似,然后是相似的,现在我和Cocoa一起工作时,没有什么相似之处.
我的感觉是差异在于绑定的方向.
在MVVM中,View绑定到ViewModel对象(V - > VM)上的属性.更改ViewModel对象的属性,并使用NotifyPropertyChanged使用一些jiggery-pokery,View会神奇地更新自身.View被动地读取View Model对象中的属性,而ViewModel完全不了解View - 你可以删除View并且它仍然可以工作.这使您可以灵活地重写,更改或组合视图,并使它们"正常工作",而无需更改视图模型代码.
在Cocoa(iOS)下的MVC中,视图控制器通过显式IBAction/IBOutlet属性将自身绑定到视图(VC - > V) - 您在视图控制器中直接引用视图对象.您直接告诉视图中的控件要在视图控制器中更改,并且ViewController对View的内部有深入的了解.删除View,ViewController将抛出运行时异常.
对我而言,这是关于绑定的方向.
使用MVC模式的Cocoa,您可以通过视图控制器直接"控制"视图(按理说,对吧?).
在MVVM/WPF中,您通过观察ViewModel对象的更改来自动更新视图控件 - 绑定是另一种方式和被动方式.
没有MVVM的WPF就像iOS的Cocoa MVC,感觉有点像ASP.NET表单.
OSX的Cocoa确实有更多类似MVVM的绑定策略,但iOS上没有.