我刚刚开始阅读有关MVC模式的内容,我完全不了解它。
该模型管理行为和 应用程序域的数据, 响应信息请求 关于它的状态(通常来自 查看),并响应指令 改变状态(通常来自 控制器)。在事件驱动系统中, 模型通知观察者(通常 视图)当信息发生变化时 他们可以做出反应。
视图将模型呈现为表单 适合交互,通常是 用户界面元素。多个视图 可以存在单个模型 不同的目的。一个视口 通常是一对一的 与显示表面的对应关系 并且知道如何渲染它。
控制器接收用户输入和 通过拨打电话来发起响应 在模型对象上。控制器接受 来自用户的输入并指示 model和viewport来执行操作 基于那个输入。
(来自http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)
和
模型。该模型管理行为 和应用程序域的数据, 响应信息请求 关于它的状态(通常来自 查看),并响应指令 改变状态(通常来自 控制器)。
查看。视图管理显示 信息。
控制器。控制器解释 鼠标和键盘的输入来自 用户,通知模型和/或 视图适当改变。
(来自http://msdn.microsoft.com/en-us/library/ff649643.aspx)
我想我明白模型和视图是什么但是我不理解控制器。从我阅读的文本和我看到的一些示例中,控制器从用户那里获取输入。我见过例如(在Java中):控制器是一个JOptionPane,它接收来自用户的华氏数字。然后在模型中分配并转换它,并在命令行中显示结果。我不明白为什么控制器会这样输入?
在Ruby on Rails中,我有一个存储数据的模型,即显示不同视图的控制器,并对视图中收到的输入执行“填充”。
答案 0 :(得分:2)
简单地说,
视图 - 负责从模型中绘制或呈现信息
模型 - 负责您的业务逻辑,并存储您的应用程序的状态
控制器 - 负责解释用户的操作并在模型上调用必要的事件并通知视图自行更新(如果需要)。
View应该只负责绘制/渲染,因此它不应该知道用户的交互应该发生什么事件。模型应该只对业务逻辑和数据感兴趣。它不应该对View有任何了解。因此,控制器将这两个部分连接在一起,允许模型可重复使用,并在单个模型上启用多个视图(想想相同数据模型的移动/电视/ Web视图)。
在Web世界中,您的Controller是接收HTTP输入的部分,您的View是您的HTML / JSP代码,您的Controller是作用于HTTP请求以执行必要业务的Servlet(或框架等效的)。该模型。
答案 1 :(得分:0)
由于名称 controller 已经指示,控制器解释输入并协调/控制模型和视图之间的通信,即它首先触发模型更新然后(如果视图不是' t直接观察模型)通知模型更改的视图,以便他们可以自行更新。
答案 2 :(得分:0)
想象一个非常基本的应用程序:一个反映数据库表的模型(一个Java bean),一个带有标签和文本字段的对话框,用于显示所有值,一个魔术按钮用于刷新内容。
控制器现在具有在用户点击(又名按下)按钮小部件之后用新值更新文本字段的逻辑。
在这个简单的案例中:
Model: Java bean (fields, getters, setters)
View: frame with txtfields, labels and a button widget
Controller: logic to tell the model to update itself, update the textfields and tell
the view to refresh
文本字段中的用户输入 - 如果您有数据绑定,则数据绑定本身是控制器的责任。因为数据绑定将更新信号发送到模型和视图。如果您的应用程序不使用数据绑定,则由操作(按钮单击)或某个事件(焦点更改,...)触发模型更新。而这个逻辑又是控制器的一部分。
BTW:视图和控制器实现了经典的策略模式:vew是一个配置了策略的对象(Head First Design Patterns,p.532)
答案 3 :(得分:0)
控制器基本上采用用户交互,并且使用某种映射,它将通过调用模型来启动响应。该模型将具有数据操作的业务逻辑。一旦控制器获得模型的响应,控制器将模型传递给视图将呈现用于查看和用户交互的界面(基于模型)。
在Ruby on Rails中我有这个模型 存储数据,控制器 显示不同的视图和做 收到的输入上的“东西” 在视图中。
模型很好,控制器必须负责用户交互以及将模型渲染到UI的视图。
答案 4 :(得分:0)
输入字段(例如JTextField)是View的一部分,确定在什么交互事件(键入字符,失去焦点,单击按钮......)上做什么的逻辑在Controller中。
与示例中一样,Controller COULD 的逻辑与View在同一个类中。如果扩展JOptionPane并实现ActionListener以便JOptionPane可以对JTextField的事件做出反应,则会出现这种情况。 但如果您想要建立一个清晰的MVC模式,那么显然不鼓励这样做,因为您将混合View和Controller的代码。