2011-01-14 12 views
1

Ich mache eine Anwendung in der Luft (flex4), da dies meine erste App ist, brauche ich einige Ratschläge für die Integration.Integration mit flex 4 (MATE MVC) und MSMQ

Alle Integration zwischen meinem System und dem Back-End muss mit MSMQ getan werden, in Ordnung, ich habe gehört, einige libs, die ich in meinem Flex-Projekt importieren und lesen Nachrichten in der MSMQ-Warteschlange importieren kann, aber das ist nicht Meine Dublette, ich würde gerne wissen, wie es eine gute Herangehensweise ist, diese Kommunikation zu machen, was ich meine ist, sollte ich eine ActionScript-Klasse haben, zB MSMQService, und dort sollte ich die Funktionen zum Ein- und Auslesen haben die Warteschlange? oder sollte ich ein neues benutzerdefiniertes Tag in Mate erstellen und separate EventMap haben, nur um mit der Integration umzugehen ?! Ich weiß, dass es viele Ansätze gibt, aber wenn jemand das schon gemacht hat, würde ich gerne wissen, wie du es gemacht hast, wie einige gute Muster.

Danke für alle Hilfe!

Antwort

1

Zuerst habe ich MSMQ noch nie benutzt und meine Antwort wird generell für Mate und Server Kommunikation sein (aufgrund meiner Sicht und 3 Monate Erfahrung).

Zweitens glaube ich nicht, dass Ihre Kommunikationsklassen eine andere eventMap benötigen.

Überblick über die Struktur meines aktuellen Projekts:

  • Ansicht Klassen, verantwortlich nur für die Ansicht Benutzeroberfläche haben wir versucht, alle Anwendungslogik in ihnen nicht enthalten.
  • Controller-Klassen, eine große all-seeing eventMap und Haufen von Ereignissen. Die eventMap enthält eine Logik für 'what view.event löst welche model.function'. Es darf KEINE Berechnungen oder andere Anwendungslogik in der 'eventMap' geben.
  • modelMap verantwortlich für die Bindung der One-Direction-Verbindung zwischen Modell und Ansicht, beschreiben, was in den View-Klassen (UI) geändert werden muss, wenn etwas im Modell geändert wird. modelMap DARF NICHT zulassen, dass die Ansichtsklassen Modell direkt manipulieren, es ist gegen Prinzipien von MVC
  • Modellklassen - die Klassen für die Anwendungslogik verantwortlich. Auch die Kommunikationsklassen sind da. So etwas wie `ServerCommunicationManager, Klasse Senden von GET/POST/tec Anfragen und anfragende für Antwort

MATE Logik:

1.) wird einige View-Klasse manipuliert und diese Ansicht geschickt ein Ereignis. Beispiel: Benutzer mit Namen und Passwort drücken die Login-Button (RegisterScreen.mxml)

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

2.) Die eventMap Instanz empfängt das Ereignis in EventHandler und ruft eine Methode in der ServerCommunicationManager Klasse. Beispiel:

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

3.) Die Modellklassenmethode wird aufgerufen. Beispiel: mein Beispiel ist gestempelt!

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.Zurück) in den 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> 

Und im modelMap:

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

Übersicht: In diesem Ansatz können Sie erfolgreich decopulate Ansicht Klassen von Kommunikationsklassen. Es funktioniert bisher stabil in unserem Projekt.

Edit: Da ich relativ neu zu Mate bin, wenn jemand Fehler in meinem Ansatz sieht, muss er einen Kommentar dazu abgeben. Es ist wirklich wichtig für mich, wenn ein Teil dieser Logik teilweise oder völlig falsch ist.

+0

+1: Danke für die Antwort werde ich versuchen, dies zu tun! Vielen Dank –