CleanArchitectureが目指すルール
CleanArchitectureが目指しているものはシンプルである。
SOLIDの達成である
- 単一責任の原則 (single-responsibility principle)
- 開放閉鎖の原則(open/closed principle)
- リスコフの置換原則(Liskov substitution principle)
- インターフェース分離の原則 (interface segregation principle)
- 依存性逆転の原則(dependency inversion principle)
SOLIDを満たしかつ、どのようなアーキテクチャーにも具象化できる基本的なアーキテクチャとは下記「図3」のアーキテクチャである。
下位”層”モジュールは上位”層”モジュールを参照する。極めてシンプルな構造である。
注意しておきたいのは下位モジュール、上位モジュールではない。あくまで参照を中心としてとらえられるモジュール呼び出し構造である。
レイヤードアーキテクチャの問題点
レイヤードアーキテクチャは、下記「図1」のような参照構造をとる。参照を持っている以上、各個別のモジュールは単独では決して完成しない。Controllerは呼び出すServiceが完成しないとモジュールは独立して完成しない。
独立性の達成のためServiceを外部参照すれば、Serviceは自身が一般モジュールであるのに、さらに一般モジュールのGatewayを参照するというSOLIDからかけ離れたアーキテクチャとなる。
CleanArchitecture
クリーンアーキテクチャを「図1」に適用したものが「図2」である。
SOLIDの4と5の技法を使用し、「図3」の形のアーキテクチャ「図4」に変換している。
アーキテクチャのルールはどれも同じである
アーキテクチャのルールは、より不変かつ普遍な上位層モジュールを下位層モジュールが参照するアーキテクチャである。
この単純なアーキテクチャはSOLIDを満たしており(容易に満たすことができる)、CleanArchitectureは複雑なアーキテクチャを単純なアーキテクチャに変換するための技法である。