1

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

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

感谢大家的帮助!

4

1 回答 1

1

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

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

我当前项目的结构概述:

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

配合逻辑:

1.)一些视图类被操纵,这个视图发送了一些事件。示例:具有名称和密码的用户按下登录按钮(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 比较陌生,如果有人在我的方法中发现错误,他必须对此发表评论。如果某些逻辑部分或完全错误,对我来说真的很重要。

于 2011-01-15T12:29:21.933 回答