2011-01-14 8 views
1

私は空気中でアプリケーションを実行しています(flex4)。これが私の最初のアプリなので、私はインテグレーションの部分を行うためのアドバイスが必要です。flex 4(MATE MVC)とMSMQを使用したインテグレーション

私のシステムとバックエンドの統合はすべてMSMQを使って行う必要があります。いいえ、MSMQキューにメッセージを読み込んで読み込むためにflexプロジェクト内にインポートできるライブラリがいくつか聞いたことがありますが、私のダブレット、私は知っている、この通信を行うには良いアプローチは、私が意味するものは、例えばMSMQServiceと呼ばれるactionscriptクラスを持っている必要があり、そこには、待ち行列?または、私はMateで新しいカスタムタグを作成し、統合に対処するために別のeventMapを用意する必要がありますか?私はアプローチがたくさんあることを知っていますが、すでに誰かがそれをしていれば、良いパターンのように、あなたがしたことを知りたいと思います。

ありがとうございました!

答えて

1

まず、私はMSMQを一度も使用していないので、私の答えは一般的にメイトとサーバーのコミュニケーション(私の見解と3ヶ月の経験のため)になります。

第2に、あなたのコミュニケーションクラスに別のものが必要だとは思わない​​。私の現在のプロジェクトの構造の

概要:

  • ビュークラス、唯一のユーザーインターフェースを示すための責任は、我々は彼らに任意のアプリケーション・ロジックを含めないことを試みました。
  • コントローラークラス、1つの大きな全体を見る​​と一連のイベント。​​には、「どのview.eventがどのmodel.functionをトリガーするか」のロジックが含まれています。 'eventMap'には、計算やその他のアプリケーションロジックがない必要があります。
  • modelMapモデル内で何かが変更されたときに、ビュークラス(UI)で変更する必要のあるものをモデルとビューの間の一方向リンクにバインドします。 modelMapビュークラスが直接モデルを操作することを許可してはいけません.MVCの原則に反します。
  • モデルクラス - アプリケーションロジックを担当するクラスです。またコミュニケーションクラスもあります。

    1)一部のViewクラスを操作して、このビューには、いくつかのイベントが送信されます:何かServerCommunicationManager、クラスはGET/POST/TECリクエストを送信し、応答

MATEロジックを要求 `のように。例:名前とパスワードを持つユーザーのログインボタン(RegisterScreen.mxml)

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

2を押す)​​インスタンスが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> 

INとmodelMap中:

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

概要:このアプローチでは、あなたが通信クラスから成功しdecopulateビュークラスをすることができます。今のところプロジェクトでは安定して動作します。

編集:私は比較的メイトに新しいので、誰かが私のアプローチでエラーを見つけたら、彼はそれについてコメントしなければなりません。このロジックの一部が部分的にまたは完全に間違っていると、本当に重要です。

+0

+1:答えをいただきありがとうございます。私はこれをやろうとします!ありがとう –

関連する問題