需要帮助理解MVC设计模式

时间:2011-01-16 07:30:31

标签: java model-view-controller design-patterns

我试图在java中找到一个MVC设计模式的例子。

这是我从阅读中了解到的,如果我错了,请纠正我:

我有模型部分,这是程序背后的逻辑,假设我们有一个电话簿,所以添加和删除数组中的联系人将是模型。

Gui是视图,它包含按钮,点击它们后,模型正在改变。

我想要了解的是什么是控制器部分,是ActionListeners吗?如何在实践中分离这些模块。

谢谢

3 个答案:

答案 0 :(得分:0)

控制器通常是MVC的一部分,人们最难定义。在您的示例中,它是加载和操作电话簿的位,以及选择使用哪个视图的位。

答案 1 :(得分:0)

我已经使用MVC很长一段时间了,并发现它是接近软件设计的绝佳机制。在你学习的过程中,我的建议是首先将所有作为控制器。换句话说,创建一个具有包含状态(模型)的成员的类以及显示和操作该状态(视图)的成员。使类的功能从视图中获取输入,修改数据,然后更新视图(控制器)。

这显然没有体现设计模式所要求的分离,但它将帮助您快速学习识别什么是清晰视图组件以及什么是清晰模型组件。然后花一些时间将独立的模型对象(这是最简单的)和后来的独立视图对象分离出来。单独的文件/对象。

对一个或两个项目执行此操作后,分离将开始变得更加自然和明显,并且当您开始编写代码(设计阶段)之前,您将启动项目各种事情都在哪里。

从个人经验来看,如果你试图在没有真正开发经验的情况下对所有事情进行分类,我认为你更倾向于过度思考并做太多工作。你会发现,如果你花一些时间以一种自然的方式编写一个项目,然后随着时间的推移而破坏它,或者说它会更有意义。

答案 2 :(得分:-2)

在你的例子中,两者似乎趋同。

但是,请以下列情况为例 工厂范围的内部联系簿 在这种情况下(让我们假设),大多数用户无法将联系人添加到地址簿中 只有人力资源部门才能在列表中添加新联系人(=员工) 我们现在有3个真正独立的代码:

  1. 图形用户界面(由普通员工查看)
    这是一个简单的列表,始终显示员工/邮件地址的完整列表 查看员工完全无法控制列表 - 他/她只是查看它 员工可以 更改列表的外观 (例如,按姓氏排序,更改字体)。
    任何此类更改都是查看器内部的,不会被模型或控制器记录或监督。
  2. 控制器(只能由人力资源部门访问)
    这可以是另一个GUI,但 能够对列表状态进行更改 (例如添加/删除员工)。
    如果你想把它放到极致,假设它是一个类似贝壳的窗口 当HR员工希望添加新员工时,他/她会输入外壳:
    “ADD'john smith'johns2 @ internalMail”
  3. 模型 - 保留状态,监督状态变化。
    这就像你描述的那样。 执行流程所需的逻辑 例如,它不会添加已添加的员工等等。
  4. 你的场景的“问题”在于它可能不是MVC的经典之作 MVC意味着反对称。也就是说,并非所有“观众”都相似,有些是“特殊”/管理员,并且比“常规”观众有额外的好处。

    希望它清除一切。