gpt4 book ai didi

.net - .Net 中的 MVVM 与 Cocoa 中的 MVC 有何不同?

转载 作者:行者123 更新时间:2023-12-03 16:05:13 24 4
gpt4 key购买 nike

我正在阅读有关 MVVM 的内容,但我一直无法分辨 MVVM 的“模型 View ”与 Cocoa 编程中使用的 MVC 中的“ Controller ”有何根本不同。

我什至读过一些解释,这些解释对其他人来说可能是“顿悟”时刻,但仍然没能理解其中的区别。我所做的有限的 Cocoa GUI 编程涉及到将 Controller 视为使用键值观察来管理从 View 到模型的数据的中心点。

在所有重要方面,在我看来,这似乎是“模型 View ”的作用,只不过它可能是与 .Net 中的 WPF <-> C# 桥有关的细微实现差异。也就是说,如果 Cocoa GUI 使用与应用程序代码不同的语言指定,并且 Controller 使用与 GUI 而不是应用程序相同的语言进行编码(即 WPF 在 XAML 中指定,而不是在 XAML 中指定),那么 Cocoa 中的 MVC 可能称为 MVVM C#)。

或者也许非Cocoa环境中的MVC,没有所有的键值观察等,与Cocoa中应用的MVC有很大不同,这导致人们发现MVVM和MVC之间的差异比我更大。

我疯了吗?请多多指教。

最佳答案

多年来我一直是 WPF 中的 MVVM 的忠实粉丝,最近又开始学习 Cocoa 中的 MVC。起初它们看起来相同,然后相似,现在随着我与 Cocoa 的合作越来越多,没有任何相似之处。

我的感觉是,差异在于绑定(bind)的方向。

在 MVVM 中,View 绑定(bind)到 ViewModel 对象上的属性 (V -> VM)。更改 ViewModel 对象的属性,并使用 NotifyPropertyChanged 进行一些操作, View 会神奇地 self 更新。 View 被动地读取 View Model 对象中的属性,而 ViewModel 对 View 完全一无所知——你可以删除 View,它仍然可以工作。这使您可以灵活地重写、更改或组合 View ,并使它们“正常工作”,而无需更改一行 View 模型代码。

在 Cocoa (iOS) 下的 MVC 中, View Controller 通过显式 IBAction/IBOutlet 属性将自身绑定(bind)到 View (VC -> V) - 您在 View Controller 中可以直接引用 View 对象。您可以直接告诉 View Controller 中的 View 控件进行更改,并且 ViewController 对 View 的内部结构有深入的了解。删除View,ViewController会抛出运行时异常。

对我来说,这与绑定(bind)的方向有关。

Cocoa 使用 MVC 模式,您可以通过 View Controller 直接“控制” View (有道理,对吧?)。

在 MVVM/WPF 中,您可以通过监视 ViewModel 对象的更改来让 View 控件自行更新 - 绑定(bind)是相反的并且是被动的。

没有 MVVM 的 WPF 就像 iOS 的 Cocoa MVC,感觉有点像 ASP.NET 表单。

Cocoa for OSX 确实有一个更像 MVVM 的可用绑定(bind)策略,但这在 iOS 上不可用。

关于.net - .Net 中的 MVVM 与 Cocoa 中的 MVC 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5865400/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com