代码之家  ›  专栏  ›  技术社区  ›  Stephane Grenier

GWT、MVP和UIBinding—如何做到最好

  •  9
  • Stephane Grenier  · 技术社区  · 14 年前

    使用MVP,通常会将视图(UI)与演示者中的演示者绑定。但是,对于最新版本的GWT,尤其是UIBinding,您可以在视图中执行以下操作:

    @UiHandler("loginButton")
    void onAboutClicked(ClickEvent event) 
    {
        // my login code
    }
    

    所以我想也许:

    @UiHandler("loginButton")
    void onAboutClicked(ClickEvent event) 
    {
        myPresenter.onAboutClicked(...);
    }
    

    您仍然可以获得单元测试演示者的好处,但代价是什么。现在的责任很乱。例如,绑定有时在视图中,有时在演示者级别。我可以看到代码随着时间陷入各种混乱。

    我还考虑将Presenter扩展到视图,以便您可以在视图中执行此操作。这里的问题是,您将失去演示者运行标准单元测试的能力!这是个大问题。那条线又变得模糊了。

    所以我的问题是,有没有人有一个好的方法可以利用MVP模式中UIBinding的注释,而不会模糊界线,失去MVP模式的优势?

    5 回复  |  直到 14 年前
        1
  •  4
  •   Stephane Grenier    14 年前

    老实说,我不使用 @UiHandler

    这个 presenter.onAboutClicked() route绝对是一个选项,但是您也可以首先在presenter中定义处理程序。

        2
  •  9
  •   Igor Klimer    14 年前

    我倾向于使用 @UiHandler 方法只有当处理程序确实查看特定的内容时,比如添加样式名等。出于其他目的(添加验证等),我坚持旧方法,即在Presenter中添加适当的处理程序。
    我建议您通读gwtgooglegroup上关于MVP和UiBinder的众多线程之一,例如 this one .

        3
  •  1
  •   samiq    14 年前

    或者,如果你正在寻找一个真正的实现如何使它工作,看看这个 blog post

    gwt2.0.x是gwt1.x的一个巨大改进,但是我仍然相信google在文档和指导方面还有一些路要走,因为正如我们在uibinder和mvp中看到的那样,它在如何使事情正常工作方面留给了很多想象。

        4
  •  0
  •   Edward Verenich    12 年前

    如果使用MVP模式,SomeView接口应该定义一个内部Presenter接口,该接口反过来由Presenter(活动类)实现。因此在视图中执行以下操作:

    interface SomeView extends IsWidget
       public interface Presenter{
              ...all the methods
              public void doSomeAction(SomeView view);
       }
    
      ...view methods
    }
    

    @UiHandler("some_button")
    void onClickSomeButton(ClickEvent e){
         // call the presenter method (you have access to it in the ViewImpl class
         presenter.doSomeAction(this);
    }
    

    它看起来有点长,但是样式很好用。

        5
  •  0
  •   AmanicA    11 年前

    对于视图来说,使用一种有时被称为“监督控制器”的模式将其某些操作委派给演示者通常很有用。

    这也是Google提倡的一种很好的方法,可以让您在使用时从nice@UiHandler注释中获益!尤宾德。与原始presenter模式的主要区别在于,视图保留一个指向presenter的链接,以便调用其某些方法,而不是presenter向视图注册回调。

    https://github.com/ArcBees/GWTP/wiki/UiHandlers