2009-06-03 3 views
1

WebページUIを使用してC#ライブラリが表示されています。もちろん、UIレイヤーはビジネスロジックレイヤーを介して呼び出しを行い、データレイヤーを呼び出してデータを取得します。データは、データを非同期に照会する機能を持つWebサービスを介して実際に取得されます。非同期アーキテクチャ

リクエストを非同期的に処理する方法を学び始めました。複数のスレッドでできるようになるとすぐに、Webサービスから複数の項目を取得することと、すべてのスレッドが束縛されていないことによるスケーラビリティ時間。

私のコードの3階層アーキテクチャでは、ページが非同期にビジネス層を呼び出す(したがって同時要求を行うことでスピードアップする)ことになり、データ層のWebサービスも順番にその要求は非同期ですか?すべてのコールバックをやり直すという論理は、私の脳を傷つけています。このタイプのアプローチのためのリソースはありますか?

答えて

3

新しい言語を導入することができれば、F#はその簡潔さを除いて、主な強みであるIMHOの1つである非同期コードを書くことに非常に優れています。非同期コードの記述は、ほぼ非同期の非線形コードとほぼ同じです!

関連リンク:

新しい言語を導入したくない場合は、あなたのコードを簡素化するためにイテレータを歌う:

1

私はあなたからのコールバックを処理するための2つの領域があると思い:

  • データ・レイヤー - >ビジネス
  • ビジネスオブジェクトをオブジェクト - >をプレゼンテーション層

1つは、コード生成を使用して、すべてのメソッドのaysncおよびコールバックロジックを自動的に作成することです。あなたがクラスの多くを持っている場合、それはかなりよくこの作品に近いに近いです。

第2の領域では、データバインドを使用して、下にあるオブジェクトが入力されるときにUIを自動的に更新する傾向があります。

3

Future<T>と呼ばれるやや有用な概念があります。これは、今後行われる非同期作業の単位です。

単純な言葉で、(アプリケーションの開始やページの読み込みなどの)アクションの開始時に、将来必要となる値を定義し、バックグラウンドスレッドでそれらを計算させることができます。

ユーザーが特定の値を要求した場合は、Future<T>からそれを求めてください。既に完了している場合はすぐに取得します。そうしないとメインスレッドをブロックするか、値がまだ準備できていないことをユーザーに知らせる必要があります。

このコンセプトについての説明はhereです。

+0

すばらしい答え! –