如何在MVP中实现事件

时间:2012-01-16 07:19:12

标签: gwt mvp

我经历了link, 但是我有点难以理解为什么

的基本原因
  1. 我们不应该使用view.getSaveButton().addClickHandler()....来说明为什么我们不应该在Display接口中使用getter? 。我从视频中了解到,在演示文稿中维护状态信息并不是一个好习惯,但很遗憾地说我不明白这对我们有什么帮助。 ?

  2. 在该视频中,它还提到我们应该使用setListeners()而不是addListeners(),这是为了避免界面中有多个侦听器。

  3. 他说他与光线对MVP的理解不同,关于不使用HasClickHandlers(),请解释原因?

  4. 我无法理解这一点的原因之一可能是该视频中有很多Google Wave特定代码,如果他使用更通用且更简单的代码来理解我会更容易理解我们理解他的观点。

    如果我冒犯了任何人,请原谅我。

1 个答案:

答案 0 :(得分:0)

1)Presenter不应该依赖于UI小部件 - 有一些原因:

  • 在Presenter中的视图和应用程序逻辑中分离UI表示
  • 在View和Presenter的接口行为中定义
  • 轻松编写演示者图层的单元测试
  • 一位演示者的几种观点(桌面,移动,e.t.c。)

名为MVP的简单接口允许我们将这两个层分开:

 

// View interface 
interface View extends AsWidget {

    void setPresenter(Presenter presenter); // cross reference to presenter

    interface Presenter { // presenter must extends from this interface
        void onContactEditClick(); // callback from view handling in presenter without any UI code
    }
}


// View realization (part)
public class ViewImpl extends Composite implements View {

    @UiHandler('someButton') // or 'somelink', e.t.c.
    void onContactEditClick(ClickEvent event) {
        presenter.onContactEditClick();
    }
}

Presenter与触发事件的控件隔离。它可以是按钮,可以链接,e.t.c。因此,可以在每个视图中创建多个视图实现(例如桌面和移动平台),并在每个视图中使用不同的UI控件集,并将这些视图与一个演示者一起使用。

Google MVP

2)监听器与UI控件有关。在我看来,最好通过Point1示例中的接口方法避免在视图和演示者之间使用侦听器。事实上,View界面中的Presenter界面是查看所有事件的更好的监听器。

3)同样的。 HasClickHanlers与View层相关,应与演示者分开。