【问题标题】:the true implementation of MVC in JAVA [closed]JAVA中MVC的真正实现[关闭]
【发布时间】:2014-06-22 10:43:56
【问题描述】:

从一周开始,我一直在寻找使用 java 的 MVC 的真正解释和实现,但我注意到每个人都以不同的方式实现它,所以如果你给我一个有用的链接或电子书,我将不胜感激它,我需要回答这些问题:

  • 如何通知模态视图发生的变化,因为模态是可观察的而不是观察者?
  • 如何通知视图发生在集合上的更改(将项目添加到数组列表),因为要添加项目,这将发生在控制器处理程序上并且控制器是不可观察的。
  • 在大型项目中是否必须使用 MVC。

【问题讨论】:

  • 模型既可以是可观察的也可以是观察者。另外,模型的变化会由控制器触发,但变化会发生在模型中,然后模型可以通知视图。
  • 重要的是要理解“模型-视图-控制器”是一个很少根据理论实际实现的概念,而且代码经常被严重扭曲以试图更接近理论。将其用作一般的结构概念,但不要让尾巴摇摆不定。
  • Model-View-Controller 变得如此流行,以至于人们觉得他们不得不说他们正在实现它,即使他们不理解它或者正在编写一些不适用的东西。因为我们的行业会惩罚人们承认他们不了解当前的时尚,所以很多人粗略地(或更少地)阅读了一些声称是 MVC 描述的东西,然后继续指导其他人等等。我建议了解基本的好的软件设计的想法,并且能够在工作面试中说出一个学术描述,否则就不用担心了。
  • 我在任何语言中看到的对 MVC 的最佳解释是 this book。

标签: java model-view-controller observer-pattern


【解决方案1】:

基本思路是:

  1. 改变的触发器可以是控制器 (=用户输入的响应代码,例如键盘/鼠标点击),或应用程序 决定。例如。如果您有一个显示价格的文本字段,则更改它的触发器可以 是明确的用户输入,或来自银行的消息。
  2. 每个此类触发器都会更新模型(并且仅更新模型)。 在我的价格示例中,它会更改模型(支持文本字段)。
  3. 更改时 - 模型触发事件,导致视图重新渲染

因此,对于您的第一个问题:没有必要“通知模型视图发生了变化”。视图不应自行改变。关闭的东西是键盘/鼠标点击,这将调用控制器。 对于您的第二个问题:“如何通知视图发生在集合上的更改”-集合应该在模型中。然后控制器将执行“model.addItem”,这将为视图触发一个事件

关于在大型项目中的使用……您可能会对此有不同的看法。 “原子”组件很可能严格遵循此模式(按钮、文本字段或类似的自定义组件)。辩论将是关于更大规模的复杂/复合数据。例如。如果我的主要逻辑驻留在数据库中,我如何通知各种屏幕发生了变化。屏幕和数据库都包含复杂的复合数据(例如用户加上他的产品推荐加上购物车),您需要决定事件的粒度:在一些简单的应用程序中,我选择了应用程序层发送“实体级事件” (比如'user changed', 'product changed')UI层直接注册的,所以不是100%的经典MVC。在其他情况下,我不厌其烦地构建了一个准确反映屏幕数据的复合模型。

【讨论】:

    【解决方案2】:

    对于第一部分,我建议您从Model–view–controller 的维基百科页面开始。你会找到一个不错的解释和其他链接。

    对于您的第一个问题,您只需考虑工作流程。与用户发生的交互是视图。然后根据用户的动作,控制器接受输入,可选地重新格式化并将其以模型已知的格式传递给模型。理论上,模型然后更新视图(在 Web 应用程序中,控制器从模型中收集数据并将其传递给视图,因此更新模型 -> 视图是间接的)。

    第二个,如果你处于模型可以直接更新视图的情况(桌面应用程序或Java小程序等专用组件)没问题。如果模型不能直接更新视图(通常在 Web 应用程序中),则更新将在下次交互时可见。事实上,它正是以这种方式发生的,当您看到一个带有仪表的网页时,仪表会不断显示最新的值:通过 javascript 或 html 元标记指示浏览器以较短的时间间隔刷新其状态。但是当您说添加一个项目时,这将发生在控制器处理程序上,这只是由用户的交互引起的(并且视图知道它必须更新其状态,或通过控制器指示这样做)。但模型可以通过许多其他方式进行修改,来自其他用户的交互、实时探测、后台操作等。

    第三个问题有点见仁见智。事实是,关注点分离被认为是一个好的设计,因为不同的层可以独立开发和测试(或者在一定范围内)。这种分离允许在一个层中改变技术而不改变其他层(即使这通常是理论上的)。但是恕我直言,最大的好处是您有很多实现 MVC 模式的框架。选择一个,框架将提供大部分样板代码,而无需您编写和测试它。所有这些都减少了开发时间和错误的可能性。

    我的结论是(就像其他人在他们的 cmets 中所说的那样)重要的是理解 MVC 模式和关注点分离的理论和理论好处。然后根据您必须开发的内容和您的环境(已知或允许的技术)选择一个可以免除您编写样板代码的框架,并花费节省的时间仔细分析所有内容的用途以及用户的期望。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多