MVC最好的定义是什么?

What is the best definition of MVC?

我一直在使用带有 MVC 配置的 Zend 框架,阅读了有关 Ruby on Rails 的信息,并且我计划探索 Python 中的其他 MVC 框架(Django?)。我真的很喜欢它隔离逻辑、安全性和验证的某些部分的方式。但是在使用它仅仅一年之后,我在这里阅读了一个答案,说几乎每个人都对 MVC 有错误的定义,这让我想知道: MVC 的正确定义是什么,我在哪里可以阅读有关模式和标准实现的信息?

更新:我知道我们都知道 BASIC 定义(有一个模型,一个控制器和一个视图,控制器上的操作在使用模型进行某些操作后转到带有一些信息的视图)但我很想知道你认为每个人都知道的定义是什么,为什么它是错误的(也许这会向每个人解释可能存在错误、意见的地方,当然还有你对此的真实观点)


在人们对 MVC 的理解中,我发现的最大错误是他们认为该模式包含的内容比实际包含的要多。更具体地说,人们经常认为:

  • 模型 = 数据库
  • 视图 = HTML
  • 控制器 = 业务逻辑和其他一切。

这通常是小型应用程序中的工作方式,但实际上 MVC 是一种将业务代码与表示代码分离的方法。该模型完成所有真正的业务工作。视图提供外观和感觉,控制器将一个映射到另一个。


参见 Martin Fowler 所著的《企业应用程序架构模式》一书的第 14 章。

关于 MVC 的部分以:

开头

"Model View Controller (MVC) is one of

the most quoted (and most misquoted)

patterns around. It started as a

framework developed by Trygve

Reenskaug for the Smalltalk platform

in the late 1970s. Since then it has

played an influential role in most UI

frameworks and in the thinking about

UI design."

它还说:

"As I think about MVC I see two

principal separations: separating the

presentation from the model and

separating the controller from the

view.

...

Of these the separation of

presentation and model is one of the

most important design principles in

software, and the only time you

shouldn't follow it is in very simple

systems where the model has no real

behavior in it anyway. As soon as you

get some nonvisual logic you should

apply the separation. Unfortunately, a

lot of UI frameworks make it

difficult, and those that don't are

often taught without a separation.

The separation of view and controller

is less important, so I'd only

recommend doing it when it is really

helpful. For rich-client systems, that

ends up being hardly ever, although

it's common in Web front ends where

the controller is separated out. Most

of the patterns on Web design here are

based on that principle."


我相信 Martin Fowler 在这里给出的 MVC 定义。但是,您可能想注意到这些框架或多或少都有自己的调整。例如,像 Django 这样的框架由于其模板特性而更像是模型-模板-控制器。


模型-视图-控制器模式提出了软件开发中使用的三个主要组件或对象:

  • 模型,它表示软件应用程序中数据的底层逻辑结构以及与之关联的高级类。此对象模型不包含有关用户界面的任何信息。
  • 一个 View ,它是代表用户界面中元素的类的集合(用户可以在屏幕上看到和响应的所有东西,例如按钮、显示框等)
  • 一个 Controller ,代表连接模型和视图的类,用于模型和视图中的类之间进行通信。

我相信同样的事情。就我而言,任何能够将显示、数据/业务对象和它们的控制(初始化、响应用户输入)的关注点分开的东西都会获得 MVC 寻求提供的好处。

目的是将这些项目移动到可重复使用的组件中,并且能够交换不同的实现,还能够单独测试各个部分。 IMO 这就是 MVC 的全部意义所在。

这是对 MVC 范式的一些历史和流行实现的很好的记录。我们也应该在其中添加为 WPF 推荐的 Model - View - ViewModel 模式。


项目分为三个部分:

  • 模型:表示到数据库中。
  • 视图:表示到您的项目界面中,您可以使用 html、javaScript 和 css 来实现。
  • 控制器:这是您在函数中表示的业务逻辑,它也是代表安全级别的模型和视图之间的链接。

  • MVC 是三种 ASP.NET 编程模型之一。 MVC 是使用 MVC(模型视图控制器)设计构建 Web 应用程序的框架:模型代表应用程序核心(例如数据库记录列表)。视图显示数据(数据库记录)。


相关推荐

  • Spring部署设置openshift

    Springdeploymentsettingsopenshift我有一个问题让我抓狂了三天。我根据OpenShift帐户上的教程部署了spring-eap6-quickstart代码。我已配置调试选项,并且已将Eclipse工作区与OpehShift服务器同步-服务器上的一切工作正常,但在Eclipse中出现无法消除的错误。我有这个错误:cvc-complex-type.2.4.a:Invali…
    2025-04-161
  • 检查Java中正则表达式中模式的第n次出现

    CheckfornthoccurrenceofpatterninregularexpressioninJava本问题已经有最佳答案,请猛点这里访问。我想使用Java正则表达式检查输入字符串中特定模式的第n次出现。你能建议怎么做吗?这应该可以工作:MatchResultfindNthOccurance(intn,Patternp,CharSequencesrc){Matcherm=p.matcher…
    2025-04-161
  • 如何让 JTable 停留在已编辑的单元格上

    HowtohaveJTablestayingontheeditedcell如果有人编辑JTable的单元格内容并按Enter,则内容会被修改并且表格选择会移动到下一行。是否可以禁止JTable在单元格编辑后转到下一行?原因是我的程序使用ListSelectionListener在单元格选择上同步了其他一些小部件,并且我不想在编辑当前单元格后选择下一行。Enter的默认绑定是名为selectNext…
    2025-04-161
  • Weblogic 12c 部署

    Weblogic12cdeploy我正在尝试将我的应用程序从Tomcat迁移到Weblogic12.2.1.3.0。我能够毫无错误地部署应用程序,但我遇到了与持久性提供程序相关的运行时错误。这是堆栈跟踪:javax.validation.ValidationException:CalltoTraversableResolver.isReachable()threwanexceptionatorg.…
    2025-04-161
  • Resteasy Content-Type 默认值

    ResteasyContent-Typedefaults我正在使用Resteasy编写一个可以返回JSON和XML的应用程序,但可以选择默认为XML。这是我的方法:@GET@Path("/content")@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})publicStringcontentListRequestXm…
    2025-04-161
  • 代码不会停止运行,在 Java 中

    thecodedoesn'tstoprunning,inJava我正在用Java解决项目Euler中的问题10,即"Thesumoftheprimesbelow10is2+3+5+7=17.Findthesumofalltheprimesbelowtwomillion."我的代码是packageprojecteuler_1;importjava.math.BigInteger;importjava…
    2025-04-161
  • Out of memory java heap space

    Outofmemoryjavaheapspace我正在尝试将大量文件从服务器发送到多个客户端。当我尝试发送大小为700mb的文件时,它显示了"OutOfMemoryjavaheapspace"错误。我正在使用Netbeans7.1.2版本。我还在属性中尝试了VMoption。但仍然发生同样的错误。我认为阅读整个文件存在一些问题。下面的代码最多可用于300mb。请给我一些建议。提前致谢publicc…
    2025-04-161
  • Log4j 记录到共享日志文件

    Log4jLoggingtoaSharedLogFile有没有办法将log4j日志记录事件写入也被其他应用程序写入的日志文件。其他应用程序可以是非Java应用程序。有什么缺点?锁定问题?格式化?Log4j有一个SocketAppender,它将向服务发送事件,您可以自己实现或使用与Log4j捆绑的简单实现。它还支持syslogd和Windows事件日志,这对于尝试将日志输出与来自非Java应用程序…
    2025-04-161