2

WebアプリケーションからNServiceBusメッセージを発行しない理由と、これに関する別の同様の質問を読みましたが、これがサービスレイヤーにも当てはまるかどうかはわかりません。たとえば、サービス レイヤーが、WCF や Web API などを使用して構築された Web サービスまたは REST サービスで構成されている場合、それらのサービスはイベントを発行したり、コマンドを送信したりする必要がありますか? これらのサービスが負荷分散された Web サーバーでホストされている場合、記事で概説されている問題はこの層にも当てはまります。推奨事項はどのように変更されますか、または変更されませんか?

イベント対コマンドの定義から見ると、私が話しているメッセージはイベントです。たとえば、「ユーザーが作成されました」など、イベントを発行する必要があります。実際のところ、ユーザーを作成したサービスは、他に何をすべきかさえ知りません。つまり、別のアプリケーションがそのユーザー向けにカスタマイズされたポータルを作成することになっていて、さらに別のアプリケーションがウェルカム キットをユーザーに送信することになっている場合があります。これはイベントであり、コマンドではありません。アプリケーション サービス自体が 1 つまたは複数の Web アプリケーションで構成されている場合、Web アプリケーションとアプリケーション サービスの定義に悩まされていると思います。

Web アプリケーションの定義

Web アプリケーションは、インターネットやイントラネットなどのネットワークを介してユーザーがアクセスするアプリケーションです。

しかし、私にとっては、ユーザーはコンピューターである可能性があるため、Web サービスは Web アプリケーションであり、それがこの質問の理由です。

編集:

具体例を考えてみましょう。ASP.NET Web サイト (MVC または Web フォームは関係ありません) は、オペレーターにフォームを表示し、ユーザー作成に関するデータ (名前、ユーザー名、パスワード) を含むポストを取得し、WCF サービスを呼び出してユーザーを作成します。Web サイトと WCF サービスの間に ServiceBus を配置し、コマンドを送信してユーザー (要求/応答) を作成し、最初の記事で説明したすべての利点を得ることができます。WCF サービスは、実際のビジネス処理レイヤーです。つまり、ユーザーを作成します。そこで質問です。ユーザーが作成されたら、アナウンスする必要がありますユーザーが作成され、他のシステムがそれに反応して、本来のことを実行できること。したがって、メッセージを公開するパターンに完全に適合します。ただし、WCF サービス自体は Web アプリケーションであるため、Web アプリケーションのほとんどの特性を備えているため、混乱が生じます。

4

2 に答える 2

2

リンク先のSOの質問への回答で述べたように、公開イベントは、実際の処理が行われる場所と関係があります。補足として、それはどちらかという問題ではありません。Send なぜならPublishそれは、2 つが交換可能であり、意図がかなり異なることを意味するからです。公開したいときは公開したい

Web に公開された統合レイヤーから公開していることに気付いた場合、同じ質問が発生するはずです。そのコードでビジネス処理を実行する必要があるのか​​、それとも処理のために別のエンドポイントに送信する必要があるのか​​? 通常、別のエンドポイントに送信するだけです。誰かがそれを呼び出したい場合に、関連するアクションをどのように実行するかを検討することもできます。たとえば、UserCreatedEventメッセージを公開している場合は、ユーザーを作成したことを意味します。ユーザーはどのように作成されますか? WCF / Web-Api レイヤーの使用を強制されますか、それとも送信できますか?CreateUserCommandアプリケーションエンドポイントによって処理されるバス上のメッセージ? 前者の場合は、設計を再考する必要があるかもしれません。ただし、後者の場合、とにかくWCF / Web-Apiからコマンドを送信する必要があり、処理エンドポイントがPublishビットを実行します:)

更新: 私の見解は、それは結束/懸念に関するものであるということです. 通常、コマンドとイベント用のサービス バス、および読み取り用の単純なクエリ レイヤーを介して、ビジネス内からドメインと対話します。何かをサードパーティに (または単に Web 経由で) 公開する必要がある場合は、WCF / WS / Web-API を使用します。ポイントは、統合エンドポイント (または Web サイトのようなフロントエンド) でのビジネス処理を避けるようにする必要があるということです。ビジネス処理は、アプリケーション サーバーに適しています。通常、ルールには例外がありますが、構造に影響を与える立場にある場合は、より良い空間にいます.

于 2013-02-21T04:27:16.627 に答える
1

実際には、アクションの実行を真に担当するコードは、イベントをパブリッシュするものと同じである必要があります。MVC アプリがあり、コントローラー自体で Entity Framework を使用してユーザー レコードを挿入している場合、SaveChanges 呼び出しの直後に Publish を配置する必要があります。ただし、「ユーザーの追加」呼び出しに関連するアクションを実行する、参照されたバイナリまたはサービスをコントローラーが呼び出す場合は、パブリッシュが存在する必要があります。私の考えでは、イベントは、公開しようとしているイベントのアクションを実行するコードのすぐそばにある必要があります。

于 2013-02-22T04:48:00.963 に答える