我正在做一个空中应用程序(flex4),因为这是我的第一个应用程序,我需要一些建议来进行集成部分。
我的系统和后端之间的所有集成都必须使用MSMQ来完成,好吧,我听说过一些我可以在我的flex项目中导入的库,用于在MSMQ队列中放入和读取消息,但这不是我的doublet,我想知道,它是如何做这种通信的好方法,我的意思是,我应该有一个actionscript类,例如调用MSMQService,在那里,我应该有放入和读取的函数队列?或者我应该在Mate中创建一个新的自定义标签,还有单独的eventMap来处理集成?!我知道有很多方法,但如果有人已经这样做了,我想知道你是怎么做的,就像一些好的模式。
感谢您的帮助!
答案 0 :(得分:1)
首先,我从未使用MSMQ,我的答案通常是Mate和服务器通信(由于我的观点和3个月的经验)。
其次,我认为您的沟通课程不需要另一个eventMap
。
我当前项目的结构概述:
eventMap
和一堆事件。 eventMap
包含'what.event触发什么model.function'的逻辑。 “eventMap”中必须没有计算或其他应用程序逻辑。modelMap
负责绑定模型和视图之间的单向链接,描述在模型中更改某些内容时视图类(UI)中必须更改的内容。 modelMap
绝不允许视图类直接操作模型,这是违反MVC原则的。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相对较新,如果有人看到我的方法有误,他必须对此发表评论。如果某些逻辑部分或完全错误,对我来说非常重要。