`
wptc
  • 浏览: 22591 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

【转】Cairngorm+BlazeDS整合Flex+Java的Demo(实例)

    博客分类:
  • Web
阅读更多

转至:http://blog.dreamhui.net/archives/64

 

今天学习Cairngorm,找了份教程,写了个Demo,以记录并分享学习过程。

Cairngorm的各个部分:

  1. ModelLocator:在一个地方存储程序中所有的值对象(ValueObjects,数据)并共享变量。它与HTTP Session对象相类似,不过它存储在Flex客户端,而不是存储在一个中间层程序服务器的服务器端。
  2. View(视图):一个或多个Flex组件(Button,panel,combo Box,Tile等等)绑定到一起形成的一个特定的个体,使用ModelLocator中的数据并且针对用户的交互动作(如点击,鼠标滑过,拖拽等)产生自定义的CairngormEvents。
  3. FrontController(前端控制器):接受CairngormEvents并且将它们映射到CairngormCommands。
  4. Command(命令):处理业务逻辑,调用CairngormDelegates或其他的Commands,以及更新ModelLocator中存储的值对象和变量。
  5. Delegate(委托):由一个Command创建,它将远程过程实例化并且将结果返回给Command。
  6. Service(服务):定义链接到远程数据库的远程过程调用(HTTP,Web Services等)。

Cairngorm的工作流程大体是这样:

客户端界面由View组成的。View使用Flex的binding(绑定)来显示ModelLocator中包含的数据。View根据诸如鼠标点击,按钮按下以及拖拽之类的用户动作产生Event。这些Event被FrontController“广播”并“监听”,FrontController会将Event映射到Command。Command包括业务逻辑,创建所需的Delegate,处理Delegate的响应,以及更新存储在ModelLocator中的数据。由于View是绑定到ModelLocator中的数据上的,所以当ModelLocator中的数据改变的时候View也会自动更新。Delegate调用Service并且将结果提交给Command,这一步是可选的,但是推荐这么做。Service调用远程数据然后将结果提交给Delegate。

Delegate的最简单的形式就是一个中间人的角色。如果一个Command需要调用webservice来获得一些数据,它将创建一个Delegate来完成这个调用。一个Command创建一个Delegate,Delegate调用一个指定的dataService,Service返回结果给Delegate,Delegate返回结果给Command。

Delegate并不是100%必需的,但是当涉及测试&程序环境的时候它们很有帮助。相对于在Command代码中使用查找替换改变所有的引用来测试,将一个Delegate重映射到一个测试Service更为简单。

下面说我的Demo:完成用户登录在后台进行验证合法性,并反馈给前台。

工具及环境介绍:详见我的上篇文章,BlazeDS实现Flex和Java通信的Demo

版本说明:

Flex:Flex 4;

ActionScript:ActionScript 3;

Java JDK:jdk1.6.0_20

Cairngorm,我用的是版本2.2,好像Cairngorm 3已经发布了,但是官网没提供下载。下载cairngorm2_2_1-bin.zip,我们要用的已经打包好的资源文件Cairngorm.swc,将其拷贝到Flex工程的libs目录下面即可。

  1. 后台Java服务端项目CairngormDemo工程组成:
  2. 相应代码:
    UserVO.java

    LoginUser.java

    配置文件(要添加的内容):
    remoting-config.xml

  3. 前台Flex工程CairngormDemo工程组成:
  4. 按照 ValueObjects模型(UserVO.as)——>模型定位(UserModelLocator.as)——>视图(loginView.mxml及主应用视图CairngormDemo.mxml)——>事件(LoginEvent.as)——>前端控制器(LoginController.as)——>Command(LoginCommand.as)——>委派代理(LoginDelegate.as)——>服务定位(LoginServiceLocator.mxml)依次的相应代码如下(因为文件中注释较多,不多写注解):
    UserVO.as

    UserModelLocator.as

    loginView.mxml

    CairngormDemo.mxml

    LoginEvent.as

    LoginController.as

    LoginCommand.as

    LoginDelegate.as

    LoginServiceLocator.mxml