我想我了解 MVC 的基本概念 - 模型包含应用程序的数据和行为,视图负责向用户显示它,控制器处理用户输入。我不确定的正是 控制器 中的内容。
例如,我有一个相当简单的应用程序(我特别考虑 Java,但我想同样的原则也适用于其他地方)。我将我的代码组织成 3 个包,分别称为app.model,app.view和app.controller.
app.model
app.view
app.controller
在app.model包中,我有一些反映应用程序实际行为的类。这些extends Observable并使用setChanged()并notifyObservers()在适当的时候触发视图更新。
extends Observable
setChanged()
notifyObservers()
该app.view包有一个类(或几个用于不同类型显示的类),它使用javax.swing组件来处理显示。其中一些组件需要反馈到模型中。如果我理解正确,视图不应该与反馈有任何关系——应该由控制器处理。
javax.swing
那么我实际上在控制器中放入了什么?我是否public void actionPerformed(ActionEvent e)只需调用控制器中的方法即可将其放入视图中?如果是这样,是否应该在控制器中进行任何验证等?如果是这样,我如何将错误消息反馈回视图 - 应该再次通过模型,还是控制器应该直接将其发送回视图?
public void actionPerformed(ActionEvent e)
如果验证在 View 中完成,我在 Controller 中放置什么?
很抱歉这个问题很长,我只是想记录下我对这个过程的理解,希望有人可以为我澄清这个问题!
在您建议的示例中,您是对的:界面中的“用户单击了’删除此项目’按钮”基本上应该只是调用控制器的“删除”功能。然而,控制器不知道视图是什么样的,因此您的视图必须收集一些信息,例如“单击了哪个项目?”
在对话形式中:
视图 :“嘿,控制器,用户刚刚告诉我他想删除第 4 项。” 管制员 :“嗯,在检查了他的凭据后,他可以这样做……嘿,模特,我希望你得到第 4 项,并尽你所能删除它。” 模型 :“第 4 项……知道了。它被删除了。还给你,管制员。” 控制器 :“在这里,我将收集新的数据集。返回给你,查看。” 视图 :“酷,我现在将新设置展示给用户。”
在该部分的末尾,您有一个选择:视图可以发出单独的请求,“给我最新的数据集”,从而更加纯粹,或者控制器隐式返回新的数据集,并使用“删除“ 手术。