MVC中视图和模型之间的通信

Posted

技术标签:

【中文标题】MVC中视图和模型之间的通信【英文标题】:Communication between the View and Model in MVC 【发布时间】:2011-09-06 14:01:15 【问题描述】:

从许多不同的来源阅读后,我对视图和模型应该如何在 MVC 模式中进行通信感到非常困惑。据我了解,accepted answer of this post 和this article from Apple 表示两者的通信应该通过控制器完成。虽然MVC page in Wikipedia、ASP.NET MVC page 和this article in MSDN 显示视图和模型之间存在直接关联。那么根据the answer in here,Apple 的文章所指的实际上是 MVP 而不是 MVC?谢谢你的帮助!!

【问题讨论】:

没有控制器,视图和模型无法交互。 View 可以强类型为 Model 类型,但控制器必须位于中间。 在 MVC 架构中,控制器向视图发送信息。 我认为这可能是由于数据库到对象的映射以及视图使用这些对象获取数据而引起的混淆。在某种程度上,您是在“访问模型”,但实际上并没有运行 SQL 查询等来获取数据。这就是 MVC 中令人不悦的那种缺乏分离的情况。 这个问题应该有更多的答案。我最近读了这个r.je/views-are-not-templates.html,我认为他给出的解释是可靠的。我同意这篇文章,mvc 不仅允许,而且在不需要进一步操作(除了检索数据之外)时强制视图与模型进行通信。让控制器只调用模型并获取一些数据是没有意义的。为什么要在这种特殊情况下添加中间层? @JamieDixon 如果视图无法直接与模型通信,那么 mvc 和 ntier arch 之间有什么区别......它们应该是相同的......? 【参考方案1】:

答案不止一个。 最终,您可以做任何适合您需要的事情。 我使用控制器 + ViewModels 连接到视图。 视图从不使用模型。正是控制器给他的东西。

史蒂文·桑达森的书,第 49 页对所有模型都有很好的解释 (MVC 的变体)。

【讨论】:

以上是关于MVC中视图和模型之间的通信的主要内容,如果未能解决你的问题,请参考以下文章

MVC 中的模型到视图通信?

SwiftUI 和 MVVM - 模型和视图模型之间的通信

MVC Java SE 应用程序使用 ActiveMQ 进行通信

使用 MVVM,如何在低级服务和视图模型之间建立通信线路?

模型和控制器之间的通信 - iOS

MVC,MVP 和 MVVM 的详解