2009-03-10 8 views
1

私は非同期SOAを提供する方法としてMSMQを使用しています。説明が難しいため、以下のコードを参照してください。私はそれを行う最善の方法を理解しようとしています。MSMQに関する質問「メッセージを処理する方法」

//another method reads off MSMQ and passes the Message into this method 
public void ReadMSMQAndAction(Message m) 
{ 
    var e = m.Entity; 

    /* this is really bad, but i some how still need some 
    * kind of traffic cop to direct action */ 
    switch typeof(m.Entity) 
    case Order.GetType() 
     switch e.Action 
     case "SAVE" 
      //todo OrderRepo Save 
} 

//Message gets searlized and put into MSMQ 
public class Message<T> 
{ 
    public T Entity { get;set; } 

    /* should this be string? 
    * or some kind of rule i.e. "ClassName:MethodName" etc? */ 
    public string Action { get;set; } 
} 

public class OrderRepo 
{ 
    public void Save(Order o) { /* todo */ } 
    public void Delete(Order o) { /* todo */ } 
    public void Update(Order o) { /* todo */ } 
} 

コードが複雑になると、管理が難しくなります。どんな提案も歓迎です!

答えて

1

代理人をご利用ください。これにより、実際のメソッド呼び出しをMSMQに渡すことができるため、キューからデリゲート/アクションを取得することができます。

+0

ありがとうございました。なぜ私はデリゲートを考えなかったのですか? – Jeff

+0

しかし実際に私が思っていたのは、バックエンドがクライアントに透過的になりたいということでした。つまり、OrderRepoがクライアントに公開されていない可能性があります。クライアントのために何らかのメカニズムを持ち、指示を交換する必要があります。 – Jeff

+0

ロジックがDLLにある場合、フロントとバックは両方を共有できます。 – cjk

0

WCFを使用してください。マイクロソフトでは、サービス(SOAの意味で)がメソッド呼び出しとして提示されるように、MSMQをラップしています。

契約は必然的に一方通行であり、トランスポートがMSMQであるという事実は、サービスとそのクライアントに全く付随しています(ただし、この選択が一方的な契約を強制する場合を除く)。別のノートで


、私はコメントすることを強要感じる:あなたははっきりと簡潔意図と実装戦略を表現できるようになるまで、あなたが作成しているものの明確かつ完全なアイデアを持っているし、成功のチャンスはありません最高でスリムです。

ソフトウェアの開発は、管理と販売の人々の漠然とした黙示を受け、一方の側が利益を失い、予算がなくなるまで、あるいはプロジェクトがスポンサーとしているものを生産するまでフィードバックのサイクルで彼らのために常識を適用することから始まります。彼らが最初に興奮した腕を振っている間に彼らが言ったことをはっきりと簡潔に表現しています。

あなたがしていることを説明できない場合は、にはが何をしているのかわかりません。あなたがするまで中断して考える時間。

関連する問題