【问题标题】:what should be the role of Controller in gwt applications implementing MVP pattern?控制器在实现 MVP 模式的 gwt 应用程序中应该扮演什么角色?
【发布时间】:2010-09-06 16:03:48
【问题描述】:

我是 GWT 的新手,在很长一段时间后重新开始编程......我的问题是关于 GWT 中的 MVP 实现,我已经阅读了以下帖子,它们很有帮助,但我仍然有一些疑问

What are MVP and MVC and what is the difference? What's your recommendation for architecting GWT applications? MVC, MVP or custom messaging solution?

我认为 MVP 的 GWT 教程 (http://code.google.com/webtoolkit/articles/mvp-architecture.html) 也有 contoller (AppController) 并且一些响应是在 Contoller 级别而不是在演示者中管理的。所以我的问题是控制器在 MVP 模式实现中应该扮演什么角色?

我们应该从哪里发起异步服务器调用,presenter 或控制器,比如如果我必须保存记录,我应该从 Presenter 调用服务器函数(它调用 DAO 并保存记录)还是应该使用 event 发布事件总线和控制器作用于事件并调用服务器函数进行保存。

【问题讨论】:

    标签: model-view-controller design-patterns gwt mvp gwt-mvp


    【解决方案1】:

    linked to 提到的关于 AppController 的 GWT 教程页面:

    处理不具体的逻辑 给任何演示者,而是驻留在 在应用层,我们将 引入 AppController 组件。

    所以它是多个演示者、视图和模型(可能是多个模型)之间的粘合剂。它还处理浏览器历史记录。可能还有其他一些不是特定于一位演示者的东西。

    至于服务器调用:有几个选项,但我个人不会从视图中执行此操作,也不会从演示者执行此操作 - 我会使用模型侦听器。原因是,多个视图和演示者可以在一个模型上一起工作。当他们更改模型时,应该将更改发送到服务器。也许您不想立即执行此操作,但在发送之前收集一些更改。在这种情况下,您可以拥有一个由 AppController 设置的计时器。

    【讨论】:

    • 感谢您的回答,您能否详细说明一下模型侦听器,是否就像演示者会使用 eventBus.fireEvent 触发事件,并且为许多演示者共享的模型侦听器会处理该事件,侦听器会调用服务器函数。
    • @Saket:我不会为此使用 EventBus。我会根据Observer pattern 实现一个Model 类(实际上只是几行代码),并在模型更改时触发模型更改事件(关于如何触发这些事件有多种变化,一个简单的会在任何模型更改时手动调用fireChangeEvent 方法)。然后,模型侦听器之一将负责将更改发送到服务器(或将它们排入队列以供以后发送)。
    【解决方案2】:

    回答你的最后一段,我会说你应该在演示者中这样做,如果有东西(一些按钮)在视图中应该这样做。 Presenter 在逻辑上与视图有很强的联系(从技术上讲,它应该是弱联系的,只通过接口而不是实现)。如果您想保存某些未从视图中显式调用的操作的记录,我不会在演示器中执行此操作。

    【讨论】:

    • 感谢您的回复,我正在关注类似的事情,比如从联系人视图中删除记录我从演示者本身调用服务器,但是当我必须调用其他视图 ContactsEditView 我通过控制器来完成时,我有制作单独的课程来维护历史
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 2010-10-18
    相关资源
    最近更新 更多