ASP.NET MVC 是 MVC 架构模式的错误实现吗?

Posted

技术标签:

【中文标题】ASP.NET MVC 是 MVC 架构模式的错误实现吗?【英文标题】:Is ASP.NET MVC an erroneous implementation of the MVC architect pattern? 【发布时间】:2013-09-01 15:22:45 【问题描述】:

背景: 我一直在考虑这个问题,但我没有找到任何好的答案。在使用 WebForms 并定期使用 MVC 2,3 和 4 工作一段时间后,我仍然不明白 ASP.NET MVC 如何声称是 MVC 模式的实现。

我了解 MVC(模式)的第一件事是它是循环的——这意味着视图使用更新模型的控制器来更新视图——并且它以这种方式循环往复。自然与圈内的用户一起输入新的指令/数据等。

但是,ASP.NET MVC 并不是真正的循环实现,这在 W3CSchools 的下面彩色图像中得到了很好的展示。我在实践中也看到过这种情况,其中 View 有一个 Model 的实例,并且 Model 是从 Controller 更新的,但 Controller 还负责在 Model 更新后更新 View。

问题: ASP.NET MVC 是有意识地错误实现的吗?应该仅将其视为专有解释还是我误解了 MVC 模式的规则?

【问题讨论】:

好问题。我见过的其他 MVC 框架实现将视图与模型隔离开来。 iosandroid 开发就是示例。在 ASP.NET MVC 中,您可以在视图中使用模型。 是的,这是错误的。主要是因为最初的 1.x 版本将 Rails 作为模板(它实际上实现了 PAC 和 PageController 混合的奇怪混蛋)。当前的 ASP.NET MVC 版本仍在遭受这种选择。 如果可以,我会标记为答案。 如果它可以适合“cmets 字段”,那么它不值得作为答案发布。恕我直言,拥有 10k+ 点数的用户不应该是代表嫖娼。 不幸的是,Web 应用程序有几个限制,使得传统的“纯”mvc 模型不切实际,因此大多数基于 Web 的 MVC 框架不得不做出让步,并且往往比纯 mvc 更关注关注点分离. Web 应用程序是无状态的,并且通常大部分表示逻辑在服务器和客户端之间分离。 【参考方案1】:

(数据库)模型不会更新视图,如果您使用单独的视图模型(您应该这样做),控制器会在传递视图模型的同时更新视图

【讨论】:

在 ASP.NET MVC 中是的,但据我所知,这在 MVC 模式中并不隐含。相反,在模式中,模型应该更新视图,而不受控制器的干扰。我不确定我是否同意模型等于数据库。我将模型视为数据模型的表示。此外,不回答我的问题。 好吧,如果您阅读***的文章,它说 MVC 模式已经发展,而这正是当前 Web 开发趋势正在发生的事情This first MVC concept defined Controller as "the module that deals with input" (similarly to how the View deals with output). The Controller, in modern applications of the 2000s, is a module, or an intermediary section of code, that mediates communication (between the Model and View) and unifies validation, using either direct calls or the Observer — to decouple the Model from the View in the active Model. 是的,当然,但进化与在保持名称的同时向所有可能的方向发展并不是一回事。这就是为什么我们有 MVVM、MVP、DCI 等等,它们都源自 MVC 模式,但具有自己的特征。注意:对我的评论不断变化;控制器处理“模型和视图”之间的通信这一事实并没有说明通信的方向。我仍然认为真正的 MVC 应该是循环的,因此,通信应该只从视图到控制器到模型到视图。 在另一个关于 MVC 模式的 SO 问题中查看 @jeff-sternal 的答案 (***.com/a/3374046/2534400) 我们的关注点不一样,如果 MVC 的定义是“将用户界面交互拆分为三个不同的角色”,那么几乎任何东西都是 MVC。

以上是关于ASP.NET MVC 是 MVC 架构模式的错误实现吗?的主要内容,如果未能解决你的问题,请参考以下文章

asp.net core 中的 MVC 架构模式

另类的ASP.NET快速开发架构体系

ASP.NET中MVC的理解

ASP.NET MVC 项目架构

asp.net中的三层架构是啥意思?mvc设计模式是啥?它们之间有关系吗?

ASP .NET MVC 架构如何适应传统的多层架构