あるJavaのソースコードをみていて、port
というディレクトリがあった
これはヘキサゴナルアーキテクチャからきていると知ったのだが、ヘキサゴナルアーキテクチャがわからなかったので調べた
こちらの翻訳記事を参考にさせてもらった blog.tai2.net
ヘキサゴナルアーキテクチャ
別名「Ports & Adapter」
アーキテクチャの意図
- アプリケーションを、ユーザー、プログラム、自動テストあるいはバッチスクリプトから、同じように駆動できるようにする
- 実際のランタイムデバイスとデータベースから隔離して、開発とテストをできるようにする。
- 外側の世界からポートに届くと、特定テクノロジーのアダプターが、利用可能な手続きを呼び出すか、メッセージに変換して、アプリケーションに渡す
- アプリケーションは、入力デバイスの正体を知らなくて済む
- アプリケーションがなにかを送る必要があるとき、ポートを通じてアダプターに送られて、受信側のテクノロジーが必要とする信号を送る
- アプリケーションは、実際に他方のアダプターの正体を知ることはなしに、全側面のアダプターと意味的に完全なやりとりをする
動機
従来のソフトウェアアプリケーションではビジネスロジックがユーザーインターフェースコードに侵入することがあった
どうにか頑張ってレイヤーを分けてビジネスロジックが入らないようにしても、度重なる変更によりビジネスロジックがとっ散らかることになってしまう
そこで、アプリケーションの提供する機能の部品すべてを、API(application programmed interface)ないし関数呼び出しを通して利用できるようにしたらどうかと考えた
レイヤー
ヘキサゴナル(六角形)といっているが、実際には何の意味もない辺の数みたいなので、ポートとアダプタ(Ports and Adapters)という名称の方が適切とのこと
ヘキサゴナルアーキテクチャには3つのレイヤーがある