加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – MVP和GWT小部件之间的通信

发布时间:2020-12-15 01:11:51 所属栏目:Java 来源:网络整理
导读:如果我在GWT中使用MVP模式,就像在GWT架构中从2009年的Google I / O谈起最佳实践,但是将信息分散到多个小部件中,应该如何填充值对象? 假设我有一个EditPersonView / Presenter,一个EditPetView / Presenter和一个EditAddressView / Presenter,最后两个是小部

如果我在GWT中使用MVP模式,就像在GWT架构中从2009年的Google I / O谈起最佳实践,但是将信息分散到多个小部件中,应该如何填充值对象?

假设我有一个EditPersonView / Presenter,一个EditPetView / Presenter和一个EditAddressView / Presenter,最后两个是小部件,作为EditPersonView中面板的一部分.有了这些我有以下课程:

class PersonDetails {
    private PetDetails pet;
    private AddressDetails addressDetails;

    // ...
}

PetDetails和AddressDetails实例变量在其演示者对应物中进行管理.当用户单击EditPersonView中的“保存”按钮时,如何完成窗口小部件之间的通信,以便PersonDetails充满来自其子窗口小部件的信息?

最佳答案
我在使用Ray Ryan的方法设计的一些不同的GWT应用程序中遇到了同样的问题.
我首选的解决方案是创建一个Singleton“会话对象”,用于存储应用程序该部分的状态.在您的示例中,它可能如下所示:

interface EditPersonSession {

    void fetchPerson(PersonId id);
    PersonDetails getCurrentPersonDetails();
    void updatePersonDetail(PersonDetail

所有三个演示者都包含对会话对象的引用(可能由Gin注入).每当用户操纵UI(视图)时,与该视图关联的演示者立即将状态推送到共享会话对象.例如,在EditAddressPresenter中:

view.getStreetNameTextBox().addValueChangeHandler(new ValueChangeHandler() {

    void onValueChange(ValueChangeEvent

在保存时,状态对象被告知将状态保存到服务器.此时,会话对象具有数据的最新表示,并且可以一次性保存所有数据.所以,在EditPersonPresenter中:

view.getSaveButton().addClickHandler(new ClickHandler() {

    void onClick(ClickEvent event) {
        editPersonSession.save();
    }

}

这样,演示者不需要包含对彼此的任何引用,但可以向服务器发送一致的信息.
如果演示者需要知道他们显示的信息何时更新(由其他演示者或服务器),会话对象可以通过触发事件总线上的事件(共享Singleton HandlerManager)来通知他们.然后,演示者可以从会话对象中提取最新的PersonDetails.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读