2

私はイベント駆動型アーキテクチャについて多くのことを読んできましたが、それは私にとって非常に理にかなっていますが、ユーザーにすぐにフィードバックを与えるという問題は私を混乱させます.

すべての従業員のリストを保持するサービス (「EmployeeService」) があるとします。従業員を作成するためのビジネス ロジックは、このサービスにあります。

別のシステムの UI がこのサービスを使用します。要件は (好きかどうかにかかわらず) 従業員のグリッドと、フォームを表示する「従業員の追加」ボタンがあることです。フォームを送信すると、新しい従業員がいるグリッドに戻ります。それ。グリッドには、サービスによって計算された派生フィールドが表示されます (これは注意が必要です!)。

従来は、送信時に読み込み画面を表示し、WCF 要求を同期的に送信して従業員を登録し、それが完了すると、グリッドに転送していました (間違いなく、今では新しい従業員がいます)。

EDA を使用すると、送信時に、ユーザーを登録するコマンドを「起動して忘れる」ことになりますが、その後はどうすればよいでしょうか? グリッドに転送できますが、新しい従業員がまだそこにいない可能性はありますか? すべて問題ないと仮定して手動でグリッドに追加することもできますが、サービスによって計算された派生データを表示するにはどうすればよいですか? または、「新しい従業員の保留中のグラフィック」がまだ作成されていない場合はグリッドに表示し、作成されるまで数秒ごとにページをチェックすることもできますか?

これは一般的なシナリオですが、これに対する一般的な解決策は何ですか?

4

2 に答える 2

1

コマンドを送信するときにコールバックを登録し、コマンドが完了するまでブロックすることができます。

NServiceBus パッケージをダウンロードした場合は、AsyncPagesMvc3 サンプル ソリューションを参照してください。まさにあなたが探しているものの例があります。

于 2012-08-10T02:59:42.233 に答える
0

SOA サービスの場合EmployeeService、[従業員の追加] ボタンも EmployeeService に属します。ユーザー インターフェイスは、複数のサービスを組み合わせたシンプルなものです。EmployeeService従業員の作成と計算 (計算が複雑でない場合) を処理するクライアントにローカルで展開できます。

例えば:

public class AddEmployeeView
{
   public IBus Bus { get; set; }    

   public void AddNewClicked() {
        // async calculate
        // store directly in the employee service database
        // or dispatch command internally
        // refresh employee list as the service is the only owner of that data
        Bus.Publish<NewEmployeeAdded>(m => { });
   }
}

したがって、上記AddEmployeeViewはに属しEmployeeServiceます。単独で、新しい従業員を計算して保存する方法のEmployeeService知識があり (独自のデータベースであっても)、NewEmployeeAddedイベントの唯一の論理パブリッシャーです。そして、ここであなたの複雑さが解消されます。

于 2012-08-13T21:15:06.767 に答える