MVC在JAVA中的真正实现

MVC在JAVA中的真正实现,java,model-view-controller,observer-pattern,Java,Model View Controller,Observer Pattern,从本周开始,我一直在寻找使用java的MVC的真实解释和实现,但我注意到,每个人实现MVC的方式都不同,因此如果您能给我一个有用的链接或电子书,我将不胜感激,我需要回答以下问题: 既然模态是可观察的而非观察者,如何将视图上发生的变化通知模态 如何通知视图集合上发生的更改(将项添加到arraylist),因为要添加项,这将发生在控制器处理程序上,并且控制器不可见 在大型项目中必须使用MVC 基本思想是: 用于更改的触发器可以是控制器 (=用户输入的响应代码,如键盘/鼠标单击),或应用程序 决定。

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

  • 既然模态是可观察的而非观察者,如何将视图上发生的变化通知模态
  • 如何通知视图集合上发生的更改(将项添加到arraylist),因为要添加项,这将发生在控制器处理程序上,并且控制器不可见
  • 在大型项目中必须使用MVC
    • 基本思想是:

    • 用于更改的触发器可以是控制器 (=用户输入的响应代码,如键盘/鼠标单击),或应用程序 决定。例如,如果您有一个显示价格的文本字段,则更改价格的触发器可能会 可以是明确的用户输入,也可以是来自银行的消息
    • 每个这样的触发器都会更新模型(并且仅更新模型)。 在我的价格示例中,它将更改模型(支持文本字段)
    • 更改时-模型触发事件,导致视图重新渲染
    • 因此,对于您的第一个问题:没有必要“通知模型视图发生了更改”。视图本身不应该改变。关闭的事情是键盘/鼠标点击,这将调用控制器。 对于第二个问题:“如何通知视图集合上发生的更改”-集合应该在模型中。然后,控制器将执行“model.addItem”,这将为视图触发一个事件

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

      对于第一部分,我建议您从上的Wikipedia页面开始。你会发现一个像样的解释和其他链接

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

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

      第三个问题有点意见问题。事实上,关注点分离被认为是一个好的设计,因为不同的层可以独立开发和测试(在一定程度上)。这种分离允许在不改变其他层的情况下改变一层中的技术(即使这通常是理论上的)。但最大的好处是,有很多框架实现MVC模式。选择一个,框架将提供大部分boiler plate代码,而无需编写和测试。所有这些都减少了开发时间和出错的可能性


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

      模型既可以观察到,也可以观察到。此外,模型的更改将由控制器触发,但更改将发生在模型中,然后模型可以通知视图。重要的是要理解,“模型-视图-控制器”是一个很少根据理论实际实现的概念,为了更接近理论,代码经常被严重扭曲。将其作为一般的结构概念使用,但不要让尾巴摇动。Model-View-Controller成为一种时尚,以至于人们觉得他们不得不说他们正在实现它,即使他们不理解它或者正在写一些它不适用的东西。因为我们的行业惩罚人们承认他们不了解当前的时尚,许多人粗略地(或更少地)阅读了一些声称是MVC描述的东西