Definition 我无法理解MVC,它是什么,它不是什么?

Definition 我无法理解MVC,它是什么,它不是什么?,definition,model-view-controller,Definition,Model View Controller,我不知道什么是MVC,我应该具备什么样的思维方式或编程模式,这样MVC的东西就能瞬间“点亮”我的脑袋?如果不是立即,我应该首先尝试做哪些简单的程序/项目,以便将MVC带来的精巧的东西应用到编程中 OOP直观且简单,对象无处不在,使用OOP范例进行代码重用的好处会立即惠及所有人。你可能会在几分钟内和任何人谈论OOP,并讲一些例子,他们会明白的。虽然OOP在某种程度上提高了编程的直观性,但MVC似乎恰恰相反。我有一些消极的想法,一些未来的雇主(甚至客户)会因为我没有使用MVC技术而看不起我 虽然我可

我不知道什么是MVC,我应该具备什么样的思维方式或编程模式,这样MVC的东西就能瞬间“点亮”我的脑袋?如果不是立即,我应该首先尝试做哪些简单的程序/项目,以便将MVC带来的精巧的东西应用到编程中

OOP直观且简单,对象无处不在,使用OOP范例进行代码重用的好处会立即惠及所有人。你可能会在几分钟内和任何人谈论OOP,并讲一些例子,他们会明白的。虽然OOP在某种程度上提高了编程的直观性,但MVC似乎恰恰相反。我有一些消极的想法,一些未来的雇主(甚至客户)会因为我没有使用MVC技术而看不起我

虽然我可能了解了MVC,但当我尝试将其应用到我自己的项目中时,我不知道从哪里开始

有些程序员甚至对如何正确实现MVC有不同的看法

以Jeff关于MVC的帖子为例:

视图只是您如何放置 数据输出,显示方式。如果你 例如,需要一些数据的子集吗 例如,我的观点是这是一个 模型的责任

因此,可能有些程序员使用MVC,但不知何故,他们无意中使用视图或控制器来提取数据的子集

为什么我们不能对如何正确实现MVC有一个明确的定义


而且,当我搜索MVC.NET程序时,大多数应用于web程序,而不是桌面应用程序,这让我更感兴趣。我的猜测是,这对web应用程序最为有利,桌面应用程序中的混合视图(html)和控制器(程序代码)没有太多问题。

你可以从阅读答案开始。

我发现MVC范型通常过于臃肿。简单的模型/视图(没有控制器)更容易理解和实现

大多数人都知道,某些类保存数据(模型)和加载/保存数据的逻辑,而另一个类显示该数据(视图)。
给它一些胶水来加载一个文档(比如文档管理器),你就完成了。

MVC确实很适合WebApps。大多数webapp都是从数据库获取数据,稍加处理,然后将数据显示给用户。DB是您的模型级别,controller进行处理,view只发出HTML代码

有些人认为控制器应该从模型中获取数据并将其提供给视图,但我认为这意味着控制器是无用的,因此它只是MV编程模型:) 但我理解它们,如果你使用某种处理,你会不止一次地使用它,因此最好在模型级别这样做,它可以通过这种方式在应用程序的不同部分之间共享

你不必为桌面应用程序使用MVC,事实上,我不确定这种模式是否适用于大型应用程序,而桌面应用程序通常都是如此。您经常希望使用“组件”,即您可以在应用程序的不同部分提供相同的数据并从中获得相同的UI,这只会导致使用MVC复制代码。

一个“典型”的MVC实现将具有:

  • 视图-呈现数据供最终用户查看,并为其提供与数据交互的用户界面对象(但不处理该交互)
  • 控制器-处理用户交互和在视图和模型之间传输数据的操作
  • 模型-为应用程序处理数据存储和数据表示
MVC模式的一个常见用法是web应用程序视图部分的HTML/CSS/浏览器呈现,PHP/脚本语言应用程序层充当控制器,MySQL或类似数据库充当模型(前面可能有或可能没有某种ORM框架)

事实上,很少有人以这种格式使用MVC,而且有充分的理由(在我看来)。不同的应用程序有不同的需求和设计要求,根据需要调整模式是有益的。如今,“MVC”似乎更多地描述了隔离应用程序层的框架的使用,而不是特定的模型-视图-控制器模式

从雇主的角度来看,真正需要的(通常)是抽象层和构建n层应用程序的经验。当你在一个应用程序中工作时,会发生相当大的思维跳跃,这个应用程序不仅可以划分为垂直的功能,还可以划分为水平的功能层


需要注意的是,蒙皮实际上只是一个特定层的一个方面,您可以在模型层更改数据源,以及操作该数据的方法(例如,一种新算法)在控制器层,逐步推出它们,而不必更改其他层。

也许下面的内容可以让您参考更多的实现。它有指向的链接。

MVC是一种模式,它与OOP配合得很好,这两种模式不是互斥的——我认为它们是正交的。MVC模式试图将显示代码(V)与数据(M)和控制流(C)分开

如果你搜索“MVC.Net”,你几乎肯定会得到很多web应用程序的点击率,因为ASP.NETMVC框架是最近发布的,这是一个MVC模式在ASP.Net编程中的应用,因此它被用于开发网站。正如您所建议的,没有理由不将该模式应用于桌面应用程序

如果您在使用MVC时遇到困难,我建议您通读模式,了解人们如何谈论使用模式建模问题/解决方案,然后更详细地了解MVC

编辑参考Fowler,他的书e是阅读MVC和其他模式的绝佳场所。

我喜欢Marti的方式