ヘキサゴナルアーキテクチャ (Hexagonal Architecture)
アーキテクチャは「内部」と「外部」という概念に基づいて、各レイヤーで行っていた役割を分け、別々のインターフェースを定義します。
「アダプター」と「ポート」という用語を使用します。
内部と外部
-
内部のロジックは、必ず外部を通じてアクセスされます。
- 外部システムとの直接的な相互作用は「アダプター」が担当します。
- 各サービスでビジネスロジックに基づいて定義されたインターフェースは「ポート」です。
- 外部サービスとの相互作用(アダプター)は、ビジネスロジックと通信するために定義されたインターフェース(ポート)とだけ通信します。
アダプターとポート
アダプター
アダプターは、サービスの観点から、サービスが使用する外部システムとの直接的な実装や相互作用を処理します。
- インバウンドアダプター:ユーザーの入力や外部システムからの呼び出しを受け、アプリケーションの内部サービス(ビジネスロジック)に渡す役割を担います。
- アウトバウンドアダプター:内部サービスがデータベース、API、メッセージキューなどと接続するインターフェースの役割を担います。
ポート
ポートは、ビジネスロジックの観点からアダプターと通信するための操作を定義したインターフェースです(実装はありません)。
- インバウンドポート:アプリケーションが外部からのリクエストを処理するインターフェースで、ユーザーのリクエストを処理するビジネスロジックの入り口です。
- アウトバウンドポート:アプリケーションが外部システム(データベース、APIなど)と通信するためのインターフェースで、ビジネスロジックが外部システムと通信する際に使用するインターフェースです。
まとめ
概念 | 役割 | 例 |
---|---|---|
インバウンドポート | アプリケーションが処理すべき機能(ユースケース)を定義するインターフェース | OrderUseCase |
インバウンドアダプター | 外部からのリクエストをポート(ユースケース)に渡す | OrderController |
アウトバウンドポート | ビジネスロジックが外部システムと通信するためのインターフェース | OrderRepository |
アウトバウンドアダプター | ポートが呼び出す実際の実装(DB、APIなどとの接続) | OrderRepositoryImpl |
アダプターを通じて外部サービスとの依存を分離
- 外部サービスとの依存関係を分離することで、サービスはいつでも外部システムを簡単に交換でき、柔軟で拡張性の高い対応が可能になります。
ポートを通じて内部ビジネスロジックとインターフェースを分離
- 内部ロジックの実装はインターフェースに依存せず、インターフェースを通じてのみ外部サービスと通信できるため、内部ロジックは柔軟に開発できます。
柔軟性と拡張性
Hexagonal Architectureは、特にマイクロサービスアーキテクチャ(MSA)環境において非常に適したソフトウェアアーキテクチャです。
これにより、各サービスが独立して動作し、外部サービスの変更や追加が簡単に行えます。