How is MVVM in .Net different than MVC in Cocoa?
我在读MVVM的文章,我的一生都无法分辨MVVM的"模型视图"与MVC中的"控制器"有何根本不同,正如在Cocoa编程中使用的那样。
我甚至读过一些对其他人来说是"啊哈"时刻的解释,但仍然没有抓住差异。我所做的有限CocoaGUI编程涉及到将控制器作为管理数据的中心点,通过使用键值观察来管理从视图到模型的数据。
在所有重要的方面,在我看来,"模型视图"所做的只是它可能是与.NET中的wpf<->c桥相关的一个细微的实现差异。也就是说,如果Cocoa中的MVC是用与应用程序代码不同的语言指定的,并且控制器是用与GUI相同的语言而不是应用程序(即WPF是用XAML而不是用C_指定的)编码的,则可以称为MVVM。
或者,在非可可环境中,如果没有观察到所有关键值等,MVC可能与可可中应用的MVC大不相同,这导致人们发现MVVM和MVC之间的差异比我大。
我疯了吗?请教育我。
多年来,我一直是WPF中MVVM的超级粉丝,最近在Cocoa中获得了MVC。起初,它们看起来是一样的,后来又是相似的,现在随着我对可可的研究越来越多,没有什么是相似的。
我的感觉是不同的是在装订的方向上。
在MVVM中,视图绑定到ViewModel对象(v->vm)上的属性。更改viewmodel对象的属性,使用notifypropertychanged进行一些小改动,视图会神奇地自我更新。视图被动地读取视图模型对象中的属性,而视图模型对视图一无所知——您可以删除视图,它仍然可以工作。这使您能够灵活地重写、更改或组合视图,并让它们"正常工作",而无需更改一行视图模型代码。
在COCO(IOS)下的MVC中,视图控制器通过显式的ibaction/iboutlet属性将自己绑定到视图(vc->v)-视图控制器中直接引用视图对象。您可以直接告诉视图上的控件在视图控制器中进行更改,而视图控制器对视图的内部有着深入的了解。删除视图,ViewController将抛出运行时异常。
对我来说,这是关于装订的方向。
对于使用MVC模式的Cocoa,您可以通过视图控制器直接"控制"视图(坚持到底,对吗?).
在mvvm/wpf中,通过监视对viewmodel对象的更改,视图控件会自行更新——绑定是相反的,是被动的。
没有MVVM的WPF就像IOS的CocoaMVC,感觉有点像ASP.NET表单。
CocoaforOSX确实有一个更像MVVM的绑定策略可用,但iOS上没有。