六角形アーキテクチャ、またはポートとアダプタアーキテクチャは、ソフトウェア設計で使用されるアーキテクチャパターンです。ポートとアダプタを使用してソフトウェア環境に簡単に接続できる、疎結合のアプリケーションコンポーネントを作成することを目的としています。これにより、コンポーネントを任意のレベルで交換できるようになり、テストの自動化が容易になります。[1]
起源
六角形アーキテクチャは、レイヤー間の望ましくない依存関係やビジネスロジックによるユーザーインターフェイスコードの汚染など、オブジェクト指向ソフトウェア設計における既知の構造上の落とし穴を回避するために、アリスター・コックバーンによって発明されました。最初はポートランドパターンリポジトリウィキで議論されました。[2] [3] 2005年にコックバーンはそれを「ポートとアダプター」と改名しました。[1] 2024年4月、コックバーンはフアン・マヌエル・ガリド・デ・パスとの共著で、このテーマに関する包括的な本を出版しました。[4]
「六角形」という用語は、アプリケーション コンポーネントを六角形のセルのように表示するグラフィカルな慣例に由来しています。その目的は、6 つの境界/ポートがあることを示唆するのではなく、コンポーネントと外部世界の間に必要なさまざまなインターフェイスを表すのに十分なスペースを残すことです。[1]
原理

六角形アーキテクチャは、アプリケーション コア、データベース、ユーザー インターフェイス、テスト スクリプト、他のシステムとのインターフェイスなど、システムをいくつかの疎結合された交換可能なコンポーネントに分割します。このアプローチは、従来の階層型アーキテクチャに代わるものです。
各コンポーネントは、公開されている多数の「ポート」を介して他のコンポーネントに接続されます。これらのポートを介した通信は、目的に応じて特定のプロトコルに従います。ポートとプロトコルは、適切な技術的手段 (オブジェクト指向言語でのメソッド呼び出し、リモート プロシージャ コール、Web サービスなど)によって実装できる抽象 API を定義します。
ポートの粒度とその数には制約はありません。
- 場合によっては、単一のポートで十分なこともあります (たとえば、単純なサービス コンシューマーの場合)。
- 通常、イベント ソース (ユーザー インターフェイス、自動フィード)、通知 (送信通知)、データベース(コンポーネントを適切な DBMS とインターフェイスするため)、および管理 (コンポーネントを制御するため)用のポートがあります。
- 極端な場合、必要に応じてユースケースごとに異なるポートが存在する可能性があります。
アダプタは、コンポーネントと外部世界をつなぐ接着剤です。アダプタは、外部世界と、アプリケーション コンポーネント内部の要件を表すポート間のやり取りを調整します。1 つのポートに複数のアダプタが存在する場合があります。たとえば、データは、GUI またはコマンド ライン インターフェイスを介してユーザーによって提供されたり、自動化されたデータ ソースによって提供されたり、テスト スクリプトによって提供されたりします。
批判
「六角形」という用語は、概念に 6 つの部分があることを意味しますが、主要な領域は 4 つしかありません。この用語の使用法は、アプリケーション コンポーネントを六角形のセルのように表示するグラフィック規則に由来しています。目的は、6 つの境界/ポートがあることを示唆するのではなく、コンポーネントと外部世界の間に必要なさまざまなインターフェイスを表すのに十分なスペースを残すことです。[1]
マーティン・ファウラーによれば、六角形アーキテクチャは、プレゼンテーション層とデータソース層の類似性を利用して、インターフェースに囲まれたコアで構成された対称的なコンポーネントを作成できるという利点があるが、サービスプロバイダーとサービスコンシューマーの間にある固有の非対称性を隠すという欠点があり、これは層として表現した方がよいとされている。[5]
進化
一部の著者によれば、六角形アーキテクチャはマイクロサービスアーキテクチャの起源である。[6]
バリエーション
2008年にジェフリー・パレルモが提案したオニオンアーキテクチャは、ヘキサゴナルアーキテクチャに似ています。アプリケーションとデータベース間の疎結合を確保するために、インターフェイスを使用してインフラストラクチャを外部化します。 [7]さらに、制御の反転を使用して、アプリケーションコアをいくつかの同心円状に分解します。[8]
2012年にロバート・C・マーティンが提案したクリーンアーキテクチャは、ヘキサゴナルアーキテクチャ、オニオンアーキテクチャ、およびその他のいくつかのバリエーションの原則を組み合わせたものです。同心円として表現されるコンポーネントの詳細レベルが追加されます。アダプタとインターフェース(ユーザーインターフェース、データベース、外部システム、デバイス)をアーキテクチャの外側のリングに分離し、内側のリングをユースケースとエンティティ用に残します。[9] [10]クリーンアーキテクチャは依存性逆転の原則を採用しており、依存性は外側のリングと内側のリングの間にのみ存在し、その逆はあり得ないという厳格なルールが適用されます。
参照
参考文献
- ^ abcd Cockburn, Alistair (2005-04-01). 「六角形のアーキテクチャ」. alistair.cockburn.us . 2020年11月18日閲覧。
- ^ 「C2 Wiki の六角形アーキテクチャ」。
- ^ 「C2 Wiki のポートとアダプタのアーキテクチャ」。
- ^ 「六角形アーキテクチャの説明」。
- ^ Fowler, Martin (2003).エンタープライズ アプリケーション アーキテクチャのパターン. Addison-Wesley. p. 21. ISBN 0-321-12742-0. OCLC 50292267.
- ^ Rajesh RV (2017)。Spring 5.0 マイクロサービス: Reactive Streams、Spring Boot、Docker、Mesos を使用したスケーラブルなマイクロサービスの構築(第 2 版)。Packt Publishing。pp. 13–14。ISBN 978-1-78712-051-8. OCLC 999610958.
- ^ Jeffrey, Palermo (2008-07-29). 「The Onion Architecture : part 1」. Palermo を使ったプログラミング. 2019-08-12閲覧。
- ^ Chatekar, Suhas (2015). 「NHibernate 4 の学習: 堅牢なデータ アクセス コードを構築するための NHibernate の潜在能力をフルに活用する」Packt Publishing. pp. 249–250. ISBN 978-1-78439-206-2. OCLC 937787252.
- ^ Martin, Robert, C. (2012-08-12). 「クリーンアーキテクチャ | Clean Coder ブログ」。blog.cleancoder.com 。2019年 8 月 12 日閲覧。
{{cite web}}: CS1 maint: 複数の名前: 著者リスト (リンク) - ^ Martin, Robert C. (2017).クリーンアーキテクチャ:ソフトウェア構造と設計の職人ガイド。Prentice Hall。ISBN 978-0-13-449416-6. OCLC 1004983973.
