web-dev-qa-db-ja.com

六角形アーキテクチャでは、ユースケースは別のユースケースを呼び出すことができますか?

私のレイヤーは次のようなものです:

コントローラー(HTTP)->ユースケース->ドメインサービス

Httpリクエストからパラメータを取得してPurchaseControllerを呼び出すPurchaseUseCaseがあるとします。

このPurchaseUseCaseはいくつかのドメインサービス(OrderRepositoryなど)を使用しています

ただし、情報を取得したり、別のコンテキストを処理したりする必要もあります。

たとえば、GetUserInfoUseCaseからPurchaseUseCaseを呼び出します(別のコンテキストにあり、結合コンテキストを感じます)。または、共有カーネルのドメインサービス(たとえば、UserInfoProviderService)を使用する必要がありますか?

再開すると、問題は、UseCaseが(別のコンテキストから)別のUseCaseを呼び出すことができるかどうかです。

実行して忘れることができるアクションであれば、イベントを使用して、他のコンテキストからそれをリッスンします。しかし、そうではありません。この場合、他のコンテキストからデータを取得するか、情報を検証する必要があります(ユーザーが十分なお金を持っている場合など)

6
fj123x

あなたの質問から、機能が別々の境界付きコンテキストに属していることは明らかです。したがって、簡単な答えはいいえ、あなたはすべきではありませんです。

将来的には、十分なスケールとパフォーマンスの要件が与えられた場合、境界のある各コンテキストが独自のマイクロサービスになると想定することをお勧めします。

したがって、別のコンテキストで一部の機能を使用する場合は、一般に、アプリケーションサービスのメソッド、API、メッセージングメディア経由の非同期など、よく公開されたAPIを介してアクセスします。

4
Subhash Bhushan

質問の全文を読むと、タイトルは次のようになります。「私のユースケース実装は、別のリモートアプリケーション(六角形)のユースケースを呼び出すことができますか?」答えはイエスです。そのための駆動ポートを作成する必要があります。駆動されたアダプターはリモート呼び出しを行います。

1
choquero70