4

我无法理解 MVC 是什么,我应该获得什么样的思维方式或编程模型,以便 MVC 的东西可以立即在我的头上“发光”?如果不是立即,我应该首先尝试做哪些简单的程序/项目,以便我可以将 MVC 带来的简洁的东西应用到编程中。

OOP 直观且容易,对象就在我们身边,使用 OOP 范式的代码重用的好处立即点击给任何人。您可能可以在几分钟内与任何人谈论 OOP,并讲一些示例,他们就会明白。虽然 OOP 以某种方式提高了编程的直观性,但 MVC 似乎恰恰相反。我有负面想法,一些未来的雇主(甚至客户)会因为我不使用 MVC 技术而看不起我。

虽然我可能获得了MVC 的可换肤方面,但是当我尝试将它应用到我自己的项目时,我不知道从哪里开始。

还有一些程序员甚至对如何正确地完成 MVC 有不同的看法。

以 Jeff 关于 MVC 的帖子为例:

视图只是您如何布置数据,如何显示数据。例如,如果您想要某些数据的子集,我认为这是模型的责任。

因此,也许有些程序员使用 MVC,但他们不知何故不经意间使用了 View 或 Controller 来提取数据子集。

为什么我们不能对什么以及如何正确完成 MVC 有一个明确的定义?

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

4

9 回答 9

4

我喜欢 Martin Fowler 所说的方式:)

http://martinfowler.com/eaaCatalog/modelViewController.html

.. 并来自http://martinfowler.com/eaaDev/uiArchs.html

以模型-视图-控制器为例。它通常被称为模式,但我认为将其视为一种模式并不是非常有用,因为它包含很多不同的想法。在不同地方阅读 MVC 的不同人从中获得不同的想法,并将其描述为“MVC”。如果这还没有引起足够的混乱,那么您就会受到通过中文耳语系统发展而来的对 MVC 的误解的影响。

于 2009-04-06T09:19:32.313 回答
3

你可以从阅读这个问题的答案开始。

于 2009-04-06T09:07:35.930 回答
2

MVC 确实非常适合 WebApps。大多数 WebApps 从 DB 中获取数据,对其进行一点处理,然后将它们展示给用户。DB 是您的模型级别,控制器进行处理,视图只发出 HTML 代码。

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

您不必为桌面应用程序使用 MVC,事实上,我不确定这种模型是否适用于大型应用程序,通常是桌面应用程序。您经常想使用“组件”,您可以提供相同的数据并从中获取相同的 UI,但在应用程序的不同部分,它只会导致使用 M​​VC 复制代码。

于 2009-04-06T09:09:56.017 回答
1

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

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

于 2009-04-06T09:09:12.697 回答
0

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

  • 视图 - 呈现数据以供最终用户查看,并为他们提供用户界面对象以与数据交互(但不处理该交互)
  • 控制器 - 处理视图和模型之间传输的数据的用户交互和操作
  • 模型 - 处理数据的存储和应用程序的数据表示

MVC 模式的常见用法是 HTML/CSS/浏览器呈现 Web 应用程序的视图部分,PHP/脚本语言应用程序级别充当控制器,MySQL 或类似的数据库充当模型(可能或者前面可能没有某种 ORM 框架)。

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

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

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

于 2009-04-06T09:10:15.220 回答
0

也许按照Wikipedia 文章可以向您推荐更多的实现。它具有指向作为 GUI 框架的 MVC 实现的链接。

于 2009-04-06T09:10:35.063 回答
0

MVC 是一种模式,它与 OOP 配合得很好,两者并不排斥——我会说它们是正交的。MVC 模式试图将显示代码 (V) 从数据 (M) 和控制流 (C) 中分离出来。

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

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

编辑参考 Fowler,他的《企业应用程序架构模式》一书是阅读 MVC 和其他模式的绝佳场所。

于 2009-04-06T09:16:27.607 回答
0

MVC 范式是一种将应用程序分成三个部分的方法:模型、视图和控制器。MVC 最初是为了将传统的输入、处理、输出角色映射到GUI领域而开发的。

用户输入、外部世界的建模以及对用户的视觉反馈由模型、视口和控制器对象分离和处理。控制器解释来自用户的鼠标和键盘输入,并将这些用户操作映射到发送到模型和/或视口的命令以实现适当的更改。模型管理一个或多个数据元素,响应有关其状态的查询,并响应更改状态的指令。视口管理显示器的一个矩形区域,并负责通过图形和文本的组合将数据呈现给用户……阅读更多甚至更多

于 2009-04-06T09:52:31.763 回答
0

MVC 的核心只是关注点分离的一种特殊情况:一个代码块负责存储数据,第二个代码块负责操作数据,第三个代码负责与用户交互。

这些块中的任何一个都可以以 OO 方式实现,也可以不实现 - MVC 和 OOP 是正交的。(尽管根据我的经验,MVC 应用程序和框架极有可能是 OO。)

于 2009-04-06T10:54:51.380 回答