Hexagonal, Onion, Clean Architectureの超ザックリとした要点
Hexagonal Architecture、Onion Architecture、Clean Architecture、これらのアーキテクチャーは基本的な考え方が共通しており、多少乱暴ですがどれも同じと言うことができますので、要点をまとめます。
各アーキテクチャーについて
Hexagonal Architecture
2005年にAlistair Cockburn氏が公開したアーキテクチャーです。
Onion Architecture
引用: The Onion Architecture : part 1 | Programming with Palermo
2008年にJeffrey Palermo氏が公開したアーキテクチャーです。
Clean Architecture
2012年にRobert C. Martin氏が公開したアーキテクチャーです。
Hexagonal Architecture、Onion Architectureなどを参考にしています。
要点
何ができるようにしたいのか?
まず、これらのアーキテクチャーによって何ができるようにしたいのかというと、 外部の要素に依存せずに実行やテストができるようにしたい 、ということになります。
ここでいう外部の要素というのは、UIやフレームワーク、DB、Webサーバーなどのことで、例えばUIであればGUIからCUIに、DBであればMySQLからPostgreSQLに、といった具合に、置き換えが可能な要素、もしくは置き換わることがあり得る要素のことです。
そのために何をするのか?
そしてそのために何をするのかというと、
- システムの最も内側に、外部の要素には依存しないビジネスルール用のレイヤーを作る
- ビジネスルール用のレイヤーの外側に、外部の要素とビジネスルール用のレイヤーを仲介するインターフェイス用のレイヤーを作る
これら2つのレイヤーを作っておくことで、外部の要素が何に置き換わったとしても、ビジネスルール用のレイヤーには何も変更を加えることなく、実行やテストができるようにします。
各アーキテクチャーの整理
上記の要点を踏まえて各アーキテクチャーの図や用語を整理すると、以下のようになります。
繰り返しになりますが、これらのアーキテクチャーの基本的な考え方は共通しており、Onion ArchitectureやClean Architectureは、Hexagonal Architectureのバリエーションの1つとも言えますので、それぞれのアーキテクチャーは別のものと捉えるのではなく、本質的には同じものだと捉えた方が良いと思っています。
Discussion