`
flashcloud
  • 浏览: 189240 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

透过GXT 的 Mail 示例,学习GXT 的 MVC结构

    博客分类:
  • GWT
阅读更多

 

基于GWTGXT UI框架 (即EXT-GWT,ExtJs的GWT版)不但提供了企业级的丰富GWT UI组件,而且实现了MVC结构,使得GXT的可用性大大加强。通过Dispatcher,Events,View,Controller,及它的BeanModel模型很好的完成了MVC各组件的职责解耦与相互通信。下面是通过GXT 自带的Mail示例,对其MVC实现的一个概要管窺。

 

1.Dispatcher是整个MVC结构的调度中心,是发号命令的指挥所,是Controller的容器,所有的Controller必须通过Dispacther的add()函数向这个指挥所报到,以便由它统一调度安排,即进行消息的路由。

 

2.每个Controller在报到前,通常得告诉Dispather这个调度中心,我能做什么,我对什么样的命令有责任,或者说对什么样的事件感兴趣。这通常是在Controller的构造函数中,通过registerEventTypes ()函数注册自己关心的事件,以便调度中心发出相应的指令、或者说什么事件发生时,去执行相应的任务。这个可以通过Mail示例中,各Controller子类的构造函数清晰的看到。

 

3.各Controller完成报到后,即进入待命状态,随时接受调度中心的安排,以完成任务。

 

4.当用户或系统向指挥所下达一条指令时,如Mail示例初始化时,通过向Dispatcher发出了Login的登录指令,调度中心即Dispacther,随即在内部对各报到的Controller进行逐一询问,都有谁要参与这次任务,找到一个后即刻下达任务,再询问下一个Controller。注意,这里任务的下达,是要讲先来后到的,即谁先报到谁就先领受任务。至于自己在接到任务后,都要干什么,这个是下一步紧接要描述的。

 

5.各Controller接到调度中心的任务,准备执行前,调度中心得检查你准备好没有,没有准备好,即会让Controller通过自己的initialize() 函数进行出发前的准备工作,即进行必要的初始化。

 

6.Controller完成准备工作后,随即根据指令,开始自己执行相应的任务。这是通过各Controller的handleEvent ()来领命受命的。

 

7.到这一步,Dispacther调度中心就完成了任务的下达指令,和各Controller任务的执行流程,即完成了消息的路由。各Controller完成任务后,通过forwardToView (),向调度中心提交任务完成报告,即进行View视图的呈现。当然,各Controller 在执行任务的过程中,也可以请求Dispatcher的协助,通过Dispatcher.forwardEvent ()来进行消息的路由。

 

8.View在接到Controller生成任务报告时,也可能要进行必要的准备工作,如视图的构建、布局等,这是通过View的initialize () 来进行的。当然,也不一定要在这里进行初始化,视图也可以根据Controller下达的不同命令来执行不同的视图构造,初始化等,因此在完成初始化后,视图的handleEvent () 紧接着也随即执行。

 

9.以上即是比较典型的GXT MVC各成员的互动流。值得注意的是,联系各组件的核心是AppEvent,即事件。在事件的来回传递中,可以在其中夹带执行任务时,可能所必须的各种数据信息。这一点可以在Mail示例的MailController接到用户点击了主界面左侧的某个邮箱时,完成到服务器抓取数据后,需要MailView来展现邮件的onViewMailItems () 函数清楚的看到,它在导航到MailView视图前,包装了一个事件,并往里面塞入了从服务器抓取的所有邮件Beans,然后传给MailView视图。

 

一直以来,认为GXT很好的实践了一些经典的设计模式,MVC在这里堪称一个经典的轻量级MVC结构,甚至还有超越,比如Controller还支持一个父子的层级结构。如果想要体会更多的精彩,你可以深入它的源代码上下求索一番

 

你可以在这里 发现一篇更为详尽的GXT Mail示例的全面介绍英文。there is also another article

 

最新更新(2010-01-03):

从分析GXT的MVC模式到研究新近GWT开发阵营非常流行的MVP模式,收获良多,GWT2.0的几个关键核心概念的推出,个人猜测GWT开发模式会发生很大的变化,包括第三方UI组件库必须付出很大的努力,方能跟上GWT2.0的步伐,尤其是GWT2.0中UIBinder将带来组件开发的全新模式,由此打算放弃GXT,至少在GXT从内部全面支持GWT的架构体系之前不打算采用,从搜集的信息看来,GXT3.0可能会达到此目标,不过,感觉是遥遥无期的事情。

 

PS:在此文的回复中,我有提到GWT官方文档中有一篇关于MVP的介绍,对该文提及的源码在一次无意的搜索中找到,现在上传上来,有需要的同学可以下载

7
0
分享到:
评论
5 楼 flashcloud 2009-12-28  
我在这里发现一篇关于Google I/O 2009中,GWT Best Practice的视频演讲英文整理稿
更为精彩的是,已经有人基于此一MVP核心概念,作出一个GWT官方例子的MVP版,更有甚者,有人替换了该例子的服务端IOC容器-Google的guice,采用Spring这一流行的IOC作为服务端容器。
小提示:这几个网站都被和掉了,我用TOR + Firefox才打开的。
4 楼 flashcloud 2009-12-24  
to Kymair:
感谢你的提议,最近一直在深入研究MVP模式,它确实在GWT的开发过程中,对单元测试有了一个质的提升,同时使耦合降至更低。职责更加清楚。在这里发现一篇GWT官方文档对MVP及单元测试的较为详尽的介绍:Large scale application development and MVP
不过,一直为一个问题困扰,GXT(Ext GWT),SmartGWT等一些优秀的第三方GWT的UI组件库由于其架构体系偏离GWT的官方接口标准,与MVP的无缝插接,至少现在是需要付出非常大的努力才行。不过,已经有人开始这一动作了:mvp4g
不知Kymair对此是否有继续深入的研究。
3 楼 Kymair 2009-12-06  
GXT的MVC一点也不经典……
具体可以看这篇文章
http://blog.gerardin.info/archives/40

推荐博主看一下Google I/O 2009里面Google Adwords的开发者关于GWT Best Practice的演讲,在Youtube上可以找到
2 楼 flashcloud 2009-11-23  
正在考察不采用GWT RPC,而使用REST + JSON来返回数据的可行性方案,不知道有没有朋友有这方面的实践经验。
1 楼 jazzy 2009-11-23  
周末看了GWT和GXT,在看Mail的时候,注意到了GXT的这种基于event的mvc。当时就觉得很舒适,极大地解除了View之间的耦合。

相关推荐

    GXT MVC design

    标题 "GXT MVC设计" 指向的是一个关于使用GXT(Google Web Toolkit Extensions)进行Model-View-Controller(MVC)架构设计的主题。GXT是Google Web Toolkit(GWT)的一个扩展库,提供了丰富的用户界面组件和高级UI...

    基于GXT的RPC与MVC实现登录和退出功能

    学习这些内容,可以帮助开发者更好地理解和掌握GXT、MVC和RPC在实际开发中的应用。 总之,基于GXT的RPC与MVC实现登录和退出功能是构建企业级Web应用的重要组成部分。通过合理的架构设计和有效的通信机制,可以确保...

    GXT 学习的好书

    ### GXT学习的好书知识点详解 #### 一、GXT简介 GXT(GXT是Ext GWT的简称)是一款基于Google Web Toolkit (GWT) 的开源Java库,用于构建高性能的企业级富客户端应用程序。GXT 提供了丰富的UI组件集合、数据网格以及...

    Gxt_BLOG(GXt项目)

    通过"GXt项目",开发者不仅可以学习到如何使用GXT构建高效且美观的Web应用,还能掌握如何将GXT与其他技术如Spring、Hibernate等集成,以实现更全面的业务逻辑。这个项目无疑为初学者和有经验的开发者都提供了一次...

    gxt初学进阶教程

    从给定的内容来看,这篇“gxt初学进阶教程”主要介绍了一个基于GWT(Google Web Toolkit)的扩展工具库ExtGWT,也被称作GXT,...通过这篇教程,开发者可以一步一步地学习如何使用GXT,逐渐掌握并运用到实际的项目中去。

    GXT 软件包和API

    GXT正是利用了GWT的优势,使得Java开发者无需深入学习JavaScript,就能创建出功能丰富的Web界面。 3. **GXT的主要特性** - **组件丰富**:GXT包含了大量的预定义组件,如表格、树、菜单、表单、图表等,满足各种UI...

    GXT Cascade ComboBox Samples

    通过分析和理解这些示例代码,开发者可以学习如何在GXT环境中实现级联下拉框,从而在自己的项目中复用或改进这一功能。同时,这也涉及到数据管理、事件处理和UI设计等多个方面,对提升GWT和GXT的编程技能大有裨益。

    GXT v2.2.1 API doc

    通过深入学习GXT v2.2.1的API文档,开发者可以有效地掌握GXT的使用技巧,提高开发效率,并构建出美观且功能强大的Web应用程序。无论是新手还是经验丰富的开发者,都应该充分利用这份官方文档来提升自己的技能。

    GXT组件使用教程

    **标题:“GXT组件使用教程”** GXT(Ext GWT)是Sencha公司开发...通过学习上述文档,开发者将能够熟练地运用GXT来构建复杂的Web应用,利用其丰富的组件库和强大的数据绑定功能,实现高效且用户体验良好的业务系统。

    Gxt,包含resource

    标题中的"Gxt"指的是Sencha GXT,这是一个基于Google Web Toolkit (GWT) 的Java库,专门用于构建富互联网应用程序(Rich Internet...同时,由于提供了源代码,开发者可以深入学习GXT的工作机制,进行自定义开发和调试。

    gxt-api-2.2.5 doc

    1. **组件库**:GXT提供了大量的UI组件,如表格(Grid)、树形视图(Tree)、菜单(Menu)、对话框(Dialog)等,这些组件在设计上遵循了MVC模式,易于定制和扩展。 2. **数据绑定**:GXT支持双向数据绑定,使得...

    gxt-1.2.3.jar.zip

    9. **社区支持**:由于GXT是一个开源项目,它拥有活跃的社区和丰富的文档资源,开发者可以在遇到问题时寻求帮助或参考示例代码。 10. **版本升级**:尽管GXT已经发展到了更高的版本,如GXT 4.x,但理解老版本的特性...

    gxt初学进阶

    ### GXT初学进阶知识点详解 #### 一、引言 随着互联网技术的发展,越来越多的企业需要构建功能丰富、用户体验良好的Web应用。然而,对于Java开发者而言,掌握复杂的前端技术如JavaScript、AJAX和CSS等是一项挑战。...

    ext gwt gxt初学教程

    GXT不仅提供了更多的UI组件,还支持本地操作和远程调用,便于实现MVC架构的企业级应用。 #### GWT与GXT的局限与优势 尽管GWT简化了Java开发者转向Web开发的过程,但其原生组件库的局限性限制了复杂应用的开发。GXT...

    一步一步教你新建GXT项目

    EXT-GWT,全称是Ext GWT,是Google Web Toolkit(GWT)的一个扩展库,...在实际开发中,还需要学习GXT提供的各种组件、布局、事件处理、数据模型以及远程服务调用等知识,以便更好地利用GXT来提升开发效率和用户体验。

    gxt、gwt与spring结合使用

    5. **MVC模式**:Spring MVC是Spring框架的一部分,可以用来构建后端控制器,与GXT或GWT的前端视图组件协同工作,实现模型-视图-控制器的设计模式。 在实际项目中,开发者通常会创建一个Spring Boot应用,配置好GXT...

    GXT组件使用教程4——Aggregation Grid

    要更好地理解和使用GXT,可以参考官方文档、在线示例以及社区资源,如iteye博客中的文章(https://rylan.iteye.com/blog/762491),博主分享了具体实现步骤和注意事项,对于初学者来说非常有帮助。 总的来说,GXT...

    org.liveSense.framework.gxt-1.0.5.zip

    通过解压并探索这些文件,开发者可以深入理解框架的内部结构,学习如何使用和定制GXT组件,以及如何将它们集成到Livesense项目中。 在实际应用中,Livesense GXT框架可能涉及到以下关键知识点: 1. **GXT组件库**...

Global site tag (gtag.js) - Google Analytics