19

私はサガを理解しようとしていますが、その間、私はサガについて特定の考え方を持っていますが、私がその考えを正しく理解したかどうかはわかりません。したがって、私は詳しく説明して、それが正しいか間違っているかを他の人に教えてもらいたいと思います。

私の理解では、sagasは、実行時間の長いプロセスをモデル化する方法の問題に対する解決策です。長期実行とは、複数のコマンド、複数のイベント、場合によっては複数の集計を含むことを意味します。プロセスは、それらの間の依存関係を回避するために、参加しているアグリゲートの1つの内部でモデル化されていません。

基本的に、サガは、内部および外部のコマンド/イベントに反応するコマンド/イベントハンドラーにすぎません。独自のロジックは含まれていません。これは単なる(有限)ステートマシンであるため、イベントXが発生したときに、コマンドYを送信するなどのタスクを提供します。

Sagasは、アグリゲートと同様にイベントストアに永続化され、特定のアグリゲートインスタンスに関連付けられるため、この特定のアグリゲート(またはアグリゲートのセット)が使用されると再ロードされます。

これは正しいですか?

4

3 に答える 3

9

Sagasを実装するにはさまざまな方法があります。コマンドを公開するステートレスイベントハンドラーからすべての状態を運ぶまで到達し、基本的にドメイン自体の集合体になります。Udi Dahanはかつて、Sagasが(彼の特定のケースでは)正しくモデル化されたシステムの唯一の集合体であるという記事を書きました。私はそれを調べて、この答えを更新します。

ドキュメントベースのサガの概念もあります。

于 2012-11-21T09:52:29.560 に答える
7

Sagasのあなたの定義は私にとって正しいように聞こえます、そして私もそれらをそう定義します。

私が行った説明の唯一の変更は、sagaはイベントのイベントハンドラー(コマンドではない)であり、受信イベントとその内部状態に基づいてコマンドを作成し、実行のためにCommandBusに送信することです。

通常、Sagaには、開始する単一のイベント(StartByEvent)と、次の状態に遷移する複数のイベント(TransitionByEvent)、および終了する複数のイベント(EndByEvent)があります。

MSDNで、彼らはSagasをProcessManagerとして定義しました

于 2012-11-21T09:45:27.443 に答える
3

sagaという用語は、CQRSの説明で一般的に使用され、制限されたコンテキストとアグリゲートの間でメッセージを調整およびルーティングするコードを指します。ただし、このガイダンスでは、このタイプのコードアーティファクトを指すのにプロセスマネージャーという用語を使用することをお勧めします。これには2つの理由があります。CQRSに関連して一般的に理解されているものとは異なる意味を持つ、サガという用語のよく知られた既存の定義があります。プロセスマネージャーという用語は、このタイプのコードアーティファクトによって実行される役割をよりよく説明しています。佐賀という用語は、CQRSパターンのコンテキストでよく使用されますが、既存の定義があります。この既存の定義との混同を避けるために、このガイダンスではプロセスマネージャーという用語を使用することを選択しました。佐賀という言葉、分散システムに関連して、元々はHectorGarcia-MolinaとKennethSalemによる論文「Sagas」で定義されていました。このホワイトペーパーでは、長期にわたるビジネスプロセスを管理するために分散トランザクションを使用する代わりに、サガと呼ばれるメカニズムを提案します。このホワイトペーパーでは、ビジネスプロセスは多くの場合、複数のステップで構成され、各ステップにはトランザクションが含まれること、およびこれらの個々のトランザクションを分散トランザクションにグループ化することで全体的な一貫性を実現できることを認識しています。ただし、長時間実行されるビジネスプロセスでは、分散トランザクションを使用すると、分散トランザクションの期間中保持する必要があるロックが原因で、システムのパフォーマンスと同時実行性に影響を与える可能性があります。ヘクター・ガルシア・モリーナとケネス・セーラムによる。このホワイトペーパーでは、長期にわたるビジネスプロセスを管理するために分散トランザクションを使用する代わりに、サガと呼ばれるメカニズムを提案します。このホワイトペーパーでは、ビジネスプロセスは多くの場合、複数のステップで構成され、各ステップにはトランザクションが含まれること、およびこれらの個々のトランザクションを分散トランザクションにグループ化することで全体的な一貫性を実現できることを認識しています。ただし、長時間実行されるビジネスプロセスでは、分散トランザクションを使用すると、分散トランザクションの期間中保持する必要があるロックが原因で、システムのパフォーマンスと同時実行性に影響を与える可能性があります。ヘクター・ガルシア・モリーナとケネス・セーラムによる。このホワイトペーパーでは、長期にわたるビジネスプロセスを管理するために分散トランザクションを使用する代わりに、サガと呼ばれるメカニズムを提案します。このホワイトペーパーでは、ビジネスプロセスは多くの場合、複数のステップで構成され、各ステップにはトランザクションが含まれること、およびこれらの個々のトランザクションを分散トランザクションにグループ化することで全体的な一貫性を実現できることを認識しています。ただし、長時間実行されるビジネスプロセスでは、分散トランザクションを使用すると、分散トランザクションの期間中保持する必要があるロックが原因で、システムのパフォーマンスと同時実行性に影響を与える可能性があります。このホワイトペーパーでは、ビジネスプロセスは多くの場合、複数のステップで構成され、各ステップにはトランザクションが含まれること、およびこれらの個々のトランザクションを分散トランザクションにグループ化することで全体的な一貫性を実現できることを認識しています。ただし、長時間実行されるビジネスプロセスでは、分散トランザクションを使用すると、分散トランザクションの期間中保持する必要があるロックが原因で、システムのパフォーマンスと同時実行性に影響を与える可能性があります。このホワイトペーパーでは、ビジネスプロセスは多くの場合、複数のステップで構成され、各ステップにはトランザクションが含まれること、およびこれらの個々のトランザクションを分散トランザクションにグループ化することで全体的な一貫性を実現できることを認識しています。ただし、長時間実行されるビジネスプロセスでは、分散トランザクションを使用すると、分散トランザクションの期間中保持する必要があるロックが原因で、システムのパフォーマンスと同時実行性に影響を与える可能性があります。

参照: http: //msdn.microsoft.com/en-us/library/jj591569.aspx

于 2014-02-27T00:50:47.920 に答える