TL;DR

アプリケーションの内側と外側を、ポートとアダプタで分けるアーキテクチャ。別名 Ports and Adapters。Alistair Cockburn が 2005 年に発表した。

なぜ必要か

ビジネスロジックが UI や外部のデータベースと絡み合うと、自動テストが難しくなり、バッチなど UI なしでの利用もできなくなる。ヘキサゴナルアーキテクチャは、アプリケーションを利用者、プログラム、自動テスト、バッチスクリプトのどれからでも同じように動かせるようにし、データベースや外部機器から切り離して開発・テストできるようにすることを目指す。

仕組み

重要な境界は左右や上下ではなく、アプリケーションの内側と外側の間にある。

ポートは、アプリケーションが外部とやりとりする API である。ポートは技術ではなく、やりとりの目的ごとに定義する。アダプタは、ポートの API と、GUI、テストハーネス、HTTP、実際のデータベース、インメモリのモックなどの具体的な技術との間を変換する。1 つのポートに複数のアダプタをつなぐことができ、アプリケーションを変えずに差し替えられる。

アプリケーションを動かす側(GUI やテストハーネスなど)をプライマリ(driving)、アプリケーションが動かす側(データベースや通知サービスなど)をセカンダリ(driven)と呼ぶ。

注意点

六角形であることに意味はない。一般的なアプリケーションには、他のシステムやアダプタとつながる部分が 4 つ以上あることを示したかっただけである。六角形は 1 次元のレイヤの図にとらわれず、必要なだけポートとアダプタを書き足せるように選ばれた形である。

関連

出典