IObservablesを試した後、メッセージバスを介した着信メッセージの処理についてIObservablesをテストすることにしました。基本的に私はを取得しIObservable<Request>
、Request
応答に応答するために必要な関数が含まれています。
処理中のある時点で、データを逆シリアル化し、リクエストから、実際に実行する必要があることを含むコマンドオブジェクトに変換する必要があります。コマンドはリクエストとは関係ありません。
デシリアライズした後、適切な応答に変換しますが、応答を送信するには、元のRequestオブジェクトが必要です。高いコード可読性を維持しながら、これを実現していきたいと思います。これまで、拡張メソッドとラムダ式を使用して、以下を取得しました(ここrequests
で、はIObservable<Request>
):
requestProcessor = requests
.Deserialize<IdentityRequest>()
.Where(idRequest => idRequest.Address != null)
.Select(idRequest => new IdentityResponse() {Identity = identityTable[idRequest.Address.Address]})
.Serialize()
.Zip(requests, (response, request) => new {request = request, response = response})
.Subscribe(data => data.request.Respond(data.response, ObjectTypes.IdentityResponse));
私の質問は、Zip
関数の前のすべてのコマンドは処理に時間がかかるためZip
、メッセージの一定のストリームがある場合、同じ入力オブジェクト(つまり、元の入力と、別々に処理された入力)で動作しますか?どうすればこれをテストできますか?
これを行うためのより良い方法はありますか?