【问题标题】:Need help understanding the MVC design pattern需要帮助理解 MVC 设计模式
【发布时间】:2011-01-16 07:30:30
【问题描述】:

我正在尝试在 java 中找到一个很好的 MVC 设计模式示例。

这是我阅读后的理解,如果我错了,请纠正我:

我有模型部分,它是程序背后的逻辑,假设我们有一个电话簿,那么从数组中添加和删除联系人就是模型。

Gui 是视图,它包含按钮,单击它们时,模型会发生变化。

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

谢谢

【问题讨论】:

  • 专门评论您发布的内容,您不太正确。数组和其中的数据是模型(即程序的状态)。您可能会认为该模型是与时间无关的,它在任何给定时间都是如此。在数组中添加和删除数据并随着时间的推移知道数组状态的代码是控制器。

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


【解决方案1】:

我已经使用 MVC 很长时间了,发现它是一种非常棒的软件设计机制。在您学习它时,我的建议是首先让 everything 成为控制器。换句话说,创建一个具有包含状态(模型)的成员以及显示和操作该状态(视图)的成员的类。让您的类的函数从视图中获取输入,修改数据,然后更新视图(控制器)。

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

在您为一两个项目执行此操作后,分离将开始更加自然和明显,并且当您开始项目时,您会在开始编写代码(设计阶段)之前知道什么各种各样的东西去哪里。

从个人经验来看,如果您在没有真正的开发经验的情况下尝试对所有内容进行分类,我认为您更容易想太多事情并做太多工作。您会发现,如果您花一些时间以自然的方式编写项目,然后在进行中或事后进行分解,这样会更有意义。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      在您的示例中,两者似乎趋于一致。

      但是,以以下场景为例。
      全厂内部通讯录。
      在这种情况下(我们假设),大多数用户无法将联系人添加到通讯录。
      只有人力资源部门可以将新联系人(=员工)添加到列表中。
      我们现在有 3 段真正独立的代码:

      1. GUI(普通员工可以看到)
        这是一个简单的列表,始终显示整个员工/邮件地址列表。
        查看员工完全无法控制列表 - 他/她只是查看它。
        员工可以更改列表的外观(例如,按姓氏排序、更改字体)。
        任何此类更改都是查看器内部的,模型或控制器不会记录或监督。
      2. 控制者(仅限 HR 部门访问)
        这可以是另一个 GUI,但可以对列表状态进行更改(例如添加/删除员工)。
        如果你想把它发挥到极致,假设它是一个类似贝壳的窗口。
        当 HR 员工希望添加新员工时,他/她在 shell 中键入:
        "添加 'john smith' johns2@internalMail"
      3. 模型 - 保存状态并监督状态变化。
        这和你描述的一样。它执行流程的必要逻辑
        例如,它不会添加已添加的员工等等。

      您的方案的“问题”在于它可能不是 MVC 的经典方案。
      MVC 意味着反对称。也就是说,并非所有“观众”都是一样的,有些是“特殊”/管理员,并且比“普通”观众有额外的好处。

      希望它能解决问题。

      【讨论】:

      • 这是不对的。在 MVC 中,所有应用程序用户只能看到视图。会有多个视图,HR 部门可以访问一些额外的视图,说 HR 部门可以访问控制器不是 MVC。
      猜你喜欢
      • 2013-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多