MVC(模型-视图-控制器)- 可以用简单的术语来解释吗? [关闭]
Posted
技术标签:
【中文标题】MVC(模型-视图-控制器)- 可以用简单的术语来解释吗? [关闭]【英文标题】:MVC (model-view-controller) - can it be explained in simple terms? [closed] 【发布时间】:2011-02-07 06:45:03 【问题描述】:我需要向技术水平不高的经理解释 MVC(模型-视图-控制器)概念,但遇到了麻烦。问题是解释需要在“你奶奶会明白”的层面上——例如。即使在MVC Wiki page 上提供的相当简单的解释也不起作用,至少在我的评论中是这样。
有没有人可以参考简单的 MVC 解释?
最好用非技术人员的隐喻示例来完成(例如,类似于“装饰器模式就像眼镜”)——我失败的一个原因是我能想出的所有 MVC 示例都与开发相关。
我曾经看过一份模式解释列表,但据我记忆,MVC 并没有在上面。
谢谢!
【问题讨论】:
模型是。视图显示(模型是什么)。控制器变化(模型是什么或视图显示什么)。 无法添加答案。但我认为最简单的例子是计算机的类比。键盘和鼠标是控制器。屏幕就是视图。模型是内存中的位和字节。 【参考方案1】:告诉“你奶奶”你是模特(你在做工作),他是控制者(即中层经理),观点就像营销,他们得到了所有的功劳。
【讨论】:
@DVK 这个想法是用外行的术语解释 MVC 是什么。至于苹果的股价,我想你有点证明了我的观点。【参考方案2】:我描述它的最佳方式是:
模型是数据源。这是您的数据库存储,它是 添加/删除/更新/更改您的信息所需的代码 仓库。 视图是用户看到并与之交互的部分。一个 html 页面,一个应用程序窗口。 控制器是将视图与模型结合的代码。如果 您单击“删除”按钮,它处理业务逻辑和 规则(你是被授权删除的人吗?它是可删除的吗? 记录等)。视图不需要知道任何关于模型的信息。模型不需要知道任何关于视图的信息。控制器是将信息源(模型)与输出(视图)结合起来。
从视频游戏的角度来考虑它。很久以前 - 有很多不同的视频卡以及它们是如何工作的。游戏需要各种代码来与它们对话。在玩游戏之前,您必须选择您拥有的卡片类型。游戏开发者必须为不同的显卡创建代码。
随之而来的是诸如 OpenGL 或 DirectX 之类的东西——它充当了它们之间的中间层。游戏开发者可以写入 DirectX 接口——而不是不同卡的指令集。它使游戏开发人员不必了解特定的视频卡。它让卡片制造商能够根据 DirectX 指令集进行设计。
在这种情况下 - 你玩游戏的是 View,DirectX 是 Controller,Model 是显卡。
【讨论】:
一个正确的答案,但是,有一个不好的例子。您的示例证明了关于 MVC 的观点,但误导了 GPU 的工作方式:) 让我解决这个问题。 DirectX 不是为了支持不同显卡的不同指令而编写的。它是为支持特定版本的 DirectX 而构建的卡。 DirectX 定义了标准并且视频卡硬件符合它。这就是为什么我们为新的 DirectX 版本提供新的视频卡,而不是新的 DirectX 版本来支持每个新发布的视频卡。所以是的,你不必为每张卡都写,因为它们要么支持 directx 要么支持 opengl【参考方案3】:MVC 将其视为:“订单详细信息(包括客户和员工信息)”、“HTML/ASP 表单(显示订单详细信息)”和“订单详细信息服务类(具有 SaveOrderDetails、GetOrderDetails 等方法)。
模型(数据类,例如 OrderDetails)
The data you want to Display
控制器(服务类)
Knows about the Model (Order Details)
Has methods to manage the Model
And as such can be unit tested Its Single Responsibility is to manage the OrderDetails CRUD operations.
It knows NOTHING about the View
视图(ASP 页面)
Displays the Model (OrderDetail's ViewData).
It has to know about the Model's structure so it can correctly display the data to the users on screen.
The View's structure (style, layout, HTML etc., locale) can be changed at anytime without it changing anything in the application's functionality.
And as such, many Views can display the same Model in many different ways.
In multi-tenant web applications, Customer specific Views can be stored in a database table and displayed based on Customer information
【讨论】:
这对于向非开发人员解释的技术性太强了。【参考方案4】:我不相信隐喻。不过不难解释:
模型是代码中了解事物的部分 视图是代码的一部分,显示模型知道的事情 控制器是代码的一部分,它从用户那里获取命令并告诉视图要显示什么以及模型要知道什么。【讨论】:
我不禁注意到您说您不相信隐喻,但在整个解释过程中都使用了它们。 编码能“知道”事情吗?代码可以“显示”东西吗?控制器可以“告诉”一些事情吗? 这些不是隐喻,只是术语的简化。如果您愿意,可以将“知道”扩展为“体现有关的知识”,或者更准确地说,“实现处理的机制”【参考方案5】:这个怎么样 - 我想不到,希望它对你有用。
MVC 可以比喻为电视。您有不同的频道,由您的有线电视提供商(型号)提供不同的信息。电视屏幕向您显示这些频道(视图)。您按下遥控器上的按钮会影响您看到的内容以及您看到它的方式(控制器)。
我在看电视,所以我从那里得到了一些灵感!
【讨论】:
我还在学习MVC,这真的让我很受启发。这给了我一个更好的画面,是的,我对 MVC 的理解程度是我奶奶的。 这是一个很好的比喻,但我想补充一点,除了用户看到的屏幕之外,遥控器也是视图的一部分。视图指示 gui 组件并将用户交互输入发送到控制器。控制器解释用户动作,所以在这个比喻中,这将是电视内部的电子元件。比喻中的模型是正确的。 我听过的最好的解释以上是关于MVC(模型-视图-控制器)- 可以用简单的术语来解释吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章