`
何足道
  • 浏览: 34038 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

GWT EventBus

阅读更多

绝大部分开发人员都清楚MVC结构:

M - model:代表数据模型

V - view:代表显示层

C - controller:代表逻辑控制层

这种结构降低了M-V-C之间的耦合性,使得模型可以独立于显示层和逻辑层的实现,即系统从struts改到struts 2的时候模型不需要做过多的更改;也使得显示层可以专注于显示,不需要对逻辑有任何了解或者参与,这样的好处是可以让前台开发人员专注于前台,提高整个开发组的工作效率和合作度。

随着系统复杂度的增加,多个controller之间需要交互(调用服务等),原本清晰的架构也会随之变得相当繁杂。

这时候就需要event bus的概念来解耦合不同的MVC系统之间的联系。

以GWT的event bus为例,在GWT的文档中对于EventBus是这样定义的:

 

Dispatches GwtEvents to interested parties. Eases decoupling by allowing objects to interact without having direct dependencies upon one another, and without requiring event sources to deal with maintaining handler lists. There will typically be one EventBus per application, broadcasting events that may be of general interest.

 

EventBus的直接功能主要是两条:1,传递events;2,关注这些events以及他们的子events。

一般来说每个application定义一个EventBus,在GWT世界中,EventBus是定义于HandlerManager之上的。因此,不能把整个application里面所有涉及到的event都注册到EventBus,原则是,只有application层面关心的events,比如用户切换了视图(view),用户需要更新视图的数据,用户要保存视图上的数据等等,而诸如用户点击了一个按钮,或者用户关掉了视图,这些显示层就能解决的需求,它们的event就定义在视图里,也由视图来关注并加以处理即可。

下面举一个GWT项目中应用EventBus的小例子(需要一些GWT的基本知识)。

笔者先创建了一个叫game.pingpong的GWT项目,这个项目含有两个View,将展示如果通过eventBus来使得不同的View之间不需要通过不同的controller来交互,而是通过eventBus这样一个十分清晰的逻辑结构来进行互动。

Game_pingpong.html中定义了3个div标签,一个button居中,左右两边各准备一个label,用来模拟乒乓球中两边选手的接球(左边选手碰球的时候左边显示Ping,右边不显示;右边选手碰球的时候右边显示Pang,左边不显示)。

 

 

 

先定义PingHandler和PongHandler这两个接口

 

接下来定义PingEvent和PongEvent

 


Game_pingpong类现在是这样的

 

 


在笔者这个项目的设计中,只要用户点击button是整个application的触发点,所以显然要给button加一个ClickHandler,在其中调用EventBus的fireEvent方法把PingEvent先fire出去(装上bus),这样项目中任何部件,只要关注了PingEvent(或者PingEvent的子类),就会接收到PingEvent已经被触发这个消息,并调用该部件中重写的PingEventHandler中的onEvent方法。

 

同时,构造PingView和PongView的时候需要传入EventBus。

 

 

 



逻辑是当用户点击button时,eventBus会fire一个PingEvent。PingView关注了PingEvent,这样PingView里面调用的PingEventHandler中的onEvent就会发生作用,在视图中把ping这个label的内容设置成“Ping”,并运用GWT的Timer,过1秒后把内容清空,并通过eventBus fire一个PongEvent。同样,PongView关注了PongEvent,它完成一系列类似的活动之后,通过eventBus fire一个PingEvent。。。如此反复。

 

 

 

 

分享到:
评论

相关推荐

    GWT中文教程(入门进阶)

    9. **GWT EventBus**:EventBus是GWT中的一种事件总线,用于组件间的通信,让组件间解耦。 10. **GWT的现代实践**:随着Web技术的发展,GWT也不断进化,如GWT Elemental支持HTML5新特性,GWT平台(如GXT、SmartGWT...

    GWT进阶教程

    5. **GWT EventBus**:事件总线机制,让组件间通信变得简单,提高代码解耦度。 6. **GWT RequestBuilder** 和 **GWT Elemental**:提供更灵活的HTTP请求处理方式,包括RESTful服务的调用。 7. **GWT Compile ...

    GWT入门和进阶

    深入理解MVP模式,学习如何设计清晰的模型、视图和呈现者,以及如何使用EventBus协调它们之间的通信。 **8. 模块化和代码分割** 利用GWT的模块化特性,可以将大型应用拆分为多个模块,按需加载,减少首屏加载时间。...

    GWT打包学习资料

    5. **GWT异步编程与EventBus**:GWT的异步编程模型是其一大特色,资料可能涉及DeferredCommand、Scheduler和AsyncCallback的使用。同时,EventBus是GWT中用于组件间通信的重要机制,学习资料会解释如何发布和监听...

    GWT-API.rar

    这些文档是开发者学习和查找GWT相关功能的重要参考,比如Widget库(包含各种UI组件)、History类(用于处理浏览器的历史记录)、EventBus(事件总线)以及RequestBuilder(用于异步HTTP请求)等。 4. **编译与优化*...

    gwt之分页控件

    GWT提供了EventBus和Command模式等机制来处理事件。 5. **数据绑定**:GWT的DataGrid或FlexTable组件可以与数据模型进行双向绑定,当数据发生变化时,表格自动更新,反之亦然。在分页场景中,我们需要确保只加载和...

    GWT一个页面包含多个模块时出现的问题

    可以使用GWT的EventBus或者Pub/Sub模式来实现模块间的数据传递,或者使用GWT的RPC或RequestFactory进行服务器通信。 6. **测试**:多模块项目可能需要更复杂的测试策略。`2module-mouse-event-testcase`这个文件名...

    GWT例子中的分页研究.

    GWT提供了丰富的事件处理机制,可以通过`EventBus`或直接在控件上添加事件监听器来实现。 7. **状态管理**:为了保持分页状态(当前页码和每页数量),我们可以使用`PlaceManager`和`PlaceHistoryHandler`来管理URL...

    把gwt放到tomcat运行

    GWT提供了一系列的API和库,如EventBus、Widgets、RPC等,用于实现用户界面和业务逻辑。 3. **GWT编译**:GWT项目需要通过GWT编译器将Java源代码转换为浏览器可执行的JavaScript。`RpcExample-compile.cmd`可能是一...

    GWT 2.2 Tutorial and Developer Guide

    - **核心组件**:详细解释了 Activities、Places 和 EventBus 这三个核心组件的作用及使用方法。 #### 十三、RequestFactory - **数据服务**:介绍了如何使用 RequestFactory 创建面向数据的服务。 - **实体代理**...

    gwt-fullscreen-demo:GWT 全屏演示

    GWT提供了丰富的事件处理机制,包括EventBus、Handler接口等,可以方便地响应用户操作并执行相应的逻辑。 5. **UI设计**:GWT提供了UiBinder工具,允许开发者使用XML来定义用户界面布局,然后在Java代码中与之绑定...

    GWT_MVP_Development.pdf

    historyHandler.register(placeController, eventBus, new HomePlace()); historyHandler.handleCurrentHistory(); ``` 3. **导航**:使用 PlaceRequest 进行导航。 ```java PlaceController ...

    interapp-eventbus

    GWT InterApp EventBus 这个 InterApp EventBus 的工作模型在 Turducken 模型中进行了解释 - 请参阅测试目录中的示例 公共类 ModuleA 实现了 EntryPoint{ .... InterAppEventBus.fireEvent("test_1"); .... } ...

    sip-servlets-spec-3.0.534.zip

    例如,`gwt-integration`可能包含对Spring的特殊支持,如GWT RPC与Spring的服务层集成,或者使用GWT的EventBus与Spring的事件模型相结合。此外,它可能还提供了数据绑定工具,使得GWT视图可以直接与后端的持久化模型...

    gwt-boot-starter-mvp4g2:Mvp4g2项目生成器

    为了改善使用MVP4G2设置GWT项目的过程,我们创建了。 配置并生成项目后,您将获得一个zip文件,其中包含-准备导入-Mvp4g2项目。 请记住,Mvp4g2可帮助您构建应用程序。 导航,历史记录和确认将生成并开始工作。 它...

    GwtPong:Pong 使用 GWT 和 HTML5 支持实现

    开发者可以通过阅读源代码学习到如何使用GWT的EventBus进行事件通信,如何利用GWT的AnimationScheduler实现游戏循环,以及如何在HTML5的Canvas上进行绘图操作。 文件列表中的"GwtPong-master"很可能是项目的主分支...

    ajax例子,Google Web Toolkit 1.0.21-ajax example, Google Web Toolkit 1.0.21

    4. **事件驱动编程**:GWT中的`EventBus`和`Handler`机制使得事件处理变得简单,可以方便地在组件间传递信息,例如在收到服务器响应时更新UI。 5. **UI组件和布局**:GWT提供了丰富的用户界面组件,如`Button`、`...

    Android代码-gwteventbinder

    GWT's EventBus is great - it allows you to write maintainable GWT applications by decoupling the components of your application, making them easy to add, modify, or remove. However, using EventBus in ...

    (转)Developer's Guide - Event Handlers

    6. **事件Bus**:GWT中的事件总线(EventBus)是一个设计模式,允许不同组件之间的解耦通信,通过发布和订阅事件进行交互。 7. **GXT组件的事件**:GXT扩展了GWT的组件库,提供了更多复杂的UI元素,如表格、树视图等...

    举例讲解Android应用开发中OTTO框架的基本使用

    OTTO是Square公司开发的一个基于GWT的EventBus实现,适用于Android环境。这个框架的核心概念是发布者(Publisher)和订阅者(Subscriber),它遵循Observer设计模式,使得程序各层之间能够有效地交换信息,而不必直接...

Global site tag (gtag.js) - Google Analytics