1

Air(flex4) でアプリケーションを実行しています。これは私の最初のアプリケーションであるため、統合部分を実行するためのアドバイスが必要です。

システムとバックエンド間のすべての統合は、MSMQ を使用して行う必要があります。よし、フレックス プロジェクト内にインポートして MSMQ キューにメッセージを入れたり読み取ったりできるライブラリがあると聞きましたが、これは私のダブレットではありません。知りたいのですが、この通信を行うのにどのような方法が適しているかを知りたいのですが、つまり、MSMQService などと呼ばれるアクション スクリプト クラスが必要であり、キューに入れたり読み取ったりする関数を用意する必要があるということです。または、Mate で新しいカスタム タグを作成し、統合に対処するためだけに別の eventMap を用意する必要がありますか?! 多くのアプローチがあることは知っていますが、誰かがすでにそれを行っている場合は、良いパターンなど、どのように行ったかを知りたいです.

助けてくれてありがとう!

4

1 に答える 1

1

まず、私は MSMQ を使用したことがなく、私の答えは一般的に Mate とサーバーの通信に関するものです (私の視点と 3 か月の経験による)。

第二に、あなたの通信クラスには別の が必要だとは思いませんeventMap

現在のプロジェクトの構造の概要:

  • ユーザー インターフェイスの表示のみを担当するビュー クラスにアプリケーション ロジックを含めないようにしました。
  • コントローラ クラス、1 つの大きなすべてをeventMap見渡せるイベントの束。eventMap「どのview.eventがどのmodel.functionをトリガーするか」のインクルードロジック。「eventMap」には、計算やその他のアプリケーション ロジックがあってはなりません。
  • modelMapモデルとビューの間の一方向リンクをバインドし、モデルで何かが変更されたときにビュー クラス (UI) で何を変更する必要があるかを説明します。modelMapビュー クラスがモデルを直接操作することを許可してはなりません。MVC の原則に反します。
  • モデル クラス - アプリケーション ロジックを担当するクラス。通信講座もあります。`ServerCommunicationManager のようなもので、GET/POST/tec 要求を送信し、応答を要求するクラス

メイトロジック:

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に比較的慣れていないので、誰かが私のアプローチに誤りを見つけた場合、彼はそれについてコメントしなければなりません. このロジックの一部が部分的または完全に間違っているかどうかは、私にとって非常に重要です。

于 2011-01-15T12:29:21.933 に答える