【问题标题】:Integration using flex 4(MATE MVC) and MSMQ使用 flex 4(MATE MVC) 和 MSMQ 集成
【发布时间】:2011-06-09 05:17:38
【问题描述】:

我正在做一个 air(flex4) 应用程序,因为这是我的第一个应用程序,我需要一些建议来完成集成部分。

我的系统和后端之间的所有集成都必须使用 MSMQ 完成,好吧,我听说我可以在我的 flex 项目中导入一些库,以便在 MSMQ 队列中放置和读取消息,但这不是我的doublet,我想知道,它是如何进行这种通信的好方法,我的意思是,我是否应该有一个动作脚本类,例如 MSMQService,并且在那里,我应该有放置和读取的功能队列?或者我应该在 Mate 中创建一个新的自定义标签,并使用单独的 eventMap 来处理集成?!我知道有很多方法,但如果有人已经这样做了,我想知道你是怎么做的,比如一些好的模式。

感谢大家的帮助!

【问题讨论】:

    标签: apache-flex actionscript-3 integration msmq mate


    【解决方案1】:

    首先,我从未使用过 MSMQ,我的回答通常是针对 Mate 和服务器通信(由于我的观点和 3 个月的经验)。

    其次,我认为你的通信类不需要另一个eventMap

    我当前项目的结构概览:

    • 视图类,仅负责显示用户界面,我们试图不包含任何应用程序逻辑。
    • 控制器类,一个大的全能eventMap 和一堆事件。 eventMap 包含“什么 view.event 触发什么 model.function”的逻辑。 “eventMap”中不得有任何计算或其他应用程序逻辑。
    • modelMap 负责绑定模型和视图之间的单向链接,描述当模型中发生某些变化时视图类(UI)中必须更改的内容。 modelMap MUST NOT 允许视图类直接操作模型,这违反了 MVC 的原则
    • 模型类 - 负责应用程序逻辑的类。通讯类也在那里。类似于 `ServerCommunicationManager,发送 GET/POST/tec 请求并请求响应的类

    MATE 逻辑:

    1.) 一些 View 类被操纵,这个视图发送了一些事件。示例:用户名和密码按下登录按钮(RegisterScreen.mxml)

    dispatchEvent(new UserRequest(UserRequest.AUTHENTICATION, name, password));
    

    2.) eventMap 实例接收EventHandler 中的事件并调用ServerCommunicationManager 类中的某些方法。示例:

    <EventHandlers type="{UserRequest.AUTHENTICATION}">
       <MethodInvoker generator="ServerCommunicationManager"
                      method="signUser"
                      arguments="{[event.name, event.password]}" />
    </EventHandlers>
    

    3.) 模型类方法被调用。示例:我的示例被存根!

    public function signUser(user:String, password:String):void
    {
       var passwordEncoded:String = encodePassword(password);
       var jsonMessage:Object = new Object();
       jsonMessage.type = "checkUser";
       jsonMessage.name = name;
       jsonMessage.password = passwordEncoded;
    
       sendGetRequest(serverIP, json, receiveResponseHandler);
    }
    
    public function receiveResponseHandler(response:Object)
    {
       var userDetails:UserDetails = decodeJsonToUser(response);
    
       if(userDetails is NoUser)
       {
          FlexGlobals.topLevelApplication.dispatchEvent(new ServerResponseEvent(ServerResponseEvent.NO_USER));
       }
       else if(userDetails is NormalUser)
       {
          FlexGlobals.topLevelApplication.dispatchEvent(new ServerResponseEvent(ServerResponseEvent.NORMAL_USER, userDetails));
       }
       else if(userDetails is Administrator){...} else ...
    }
    

    4.) 回到EventMap

    <EventHandlers type="{ServerResponseEvent.NORMAL_USER}">
       <PropertySetter generator="UserModel"
                       targetId="signedUser"
                       source="{event.userDetails}"/>
    </EventHandlers>
    <EventHandlers type="{ServerResponseEvent.NoUser}">
       <PropertySetter generator="UserModel"
                       targetId="signedUser"
                       source="null"/>
       <PropertySetter generator="ViewModel"
                       targetId="state"
                       source="loginDenied"/>
    </EventHandlers>
    

    而在modelMap

    <Injectors target="{RegisterScreen}">
        <PropertyInjector targetKey="state" 
                          source="{ViewModel}" 
                          sourceKey="state" />
        <PropertyInjector targetKey="userName" 
                          source="{UserModel}" 
                          sourceKey="signedUser"/>
    </Injectors>
    

    概述:在这种方法中,您可以成功地将视图类与通信类分离。到目前为止,它在我们的项目中运行稳定。

    编辑:由于我对 Mate 比较陌生,如果有人发现我的方法有错误,他必须对此发表评论。如果某些逻辑部分或完全错误,对我来说真的很重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 2010-12-11
      • 2012-02-27
      • 1970-01-01
      相关资源
      最近更新 更多