###質問
3パターンの処理ABCがクライアントによって要求され、それをキューで1つずつ処理するプログラムを書きます。
Aはファイル書き込み、Bはデータベース書き込み、CはWEBAPIの実行です。
処理すべき要求の一つ一つをオブジェクトとみなし、要求を表す抽象クラスWhatToDoと、その派生クラスA,B,Cを実装しています。
A,B,Cクラスでの処理に必要なデータとクライアントへの応答手段は全てコンストラクタで渡しているものとします。(引数を渡すところは省略します。)
ここからが問題で、一部要求についてクライアントに応答を返すのですが、ファイル書き込み要求(A)は応答を返さず、データベース書き込み要求(B)は同期処理後にすぐ応答を返し、WEBAPI実行要求(C)はWEBAPIからのレスポンスを受け取った後に応答を行います。
このCを要求したクライアントへの応答をどう実現するかで悩んでいます。
以下がコードになります。
Cの応答以外は全て実現されています。
C#
1 2Queue<WhatToDo> queue = new Queue<WhatToDo>(); 3 4void client_RequestedA() 5{ 6 // 書き込み先や書き込み内容を渡している 7 var a = new A(//...); 8 queue.Enqueue(a); 9} 10 11void client_RequestedB() 12{ 13 // クライアントへの応答手段、接続先や書き込み内容を渡している 14 var b = new B(//...); 15 queue.Enqueue(b); 16} 17 18void client_RequestedC() 19{ 20 // クライアントへの応答手段、apiのurlやパラメータを渡している 21 var c = new C(//...); 22 queue.Enqueue(c); 23} 24 25void myQueueTimer_Elasped() 26{ 27 // キューから要求を引っ張りだして処理 28 var whatToDo = queue.Dequeue(); 29 whatToDo.Do(); 30} 31 32void webAPI_Responded() 33{ 34 //// ここで何かするべきか? 35} 36 37class WhatToDo 38{ 39 // 各要求に対する具体的な処理はDoメソッドで行う 40 public abstract void Do(); 41} 42 43class A : WhatToDo 44{ 45 public override void Do() 46 { 47 // ファイル書き込み 48 //... 49 } 50} 51 52class B : WhatToDo 53{ 54 public override void Do() 55 { 56 // DB書き込み 57 //... 58 // クライアントに返信 59 //... 60 } 61} 62 63class C : WhatToDo 64{ 65 public override void Do() 66 { 67 // WEBAPIにリクエスト 68 //... 69 } 70}
ご意見をお聞かせください。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/21 04:54
2016/10/21 07:09
2016/10/21 10:00 編集