2019-09-08こちらに詳細に記載しています。宜しければご参照ください。複雑に見えるクリーンアーキテクチャをSOLID原則を用いて、成り立ちをひも解いていきます。背景クリーンアーキテクチャを調べていくと下記のような概念図や構成図を見かけます。言いたいことは何となく分かるのですが、初見でメリットが理解できませんでした。本記事ではレイヤードアーキテクチャの欠点をSOLID原則に沿って補完していくことで、クリーンアーキテクチャをひも解いていきたいと思います。SOLID原則とはソフトウェアの拡張性、保守性等を担保し、メンテナンスしにくいプログラムになることを防ぐための原則です。S:SRP、単一責任の原則O:OCP、開放閉鎖の原則L:LSP、リスコフの置換原則I:ISP、インタフェース分離の原則D:DIP、依存性逆転の原則SOLID原則の詳細はこちらの記事が参考になります。イラストで理解するSOLID原則クリーンアーキテクチャが必要な理由こちらの最も基本的なレイヤードアーキテクチャの欠点からクリーンアーキテクチャの必要性を見ていきます。その1上図のレイヤードアーキテクチャの欠点の一つにDomain層が、Infrastructure層に依存していることが挙げられます。Principle)によれば安定しているDomain層が、変更が多く不安定なInfrastructure層に依存していることは安定依存の原則に反しています。この依存関係を解決する考え方として依存性逆転の原則があります。依存性逆転の原則に従うとDomainとInfrastructureの関係は下記のようになります。DomainとInfrastructureの間にInterfaceを設けます。その2依存性逆転の原則により、DomainとInfrastructureの関係を逆転させました。完全には依存関係を切り離せていません。Interfaceを呼び出すときにInfrastructureをインスタンス化する必要があります。Accessを配置することでこの問題を解決します。infra.getDataFromInfra();}この構成によってDamainからInfrastructureを抽象化しますDataAccessのようなデータアクセス手段、データの永続化を抽象化するオブジェクトをRepositoryと呼びます。デザインパターンのリポジトリパターンとして知られています。Principle)次に視点を変えてUI(Presentation)とApplicationの依存関係に目を向けてみます。一般的に、UIはユーザーの目に最も触れるため比較的変更が多く発生します。このため、UIの変更をApplicationに波及させたくなく、また、Applicationの変更にUIも振り回されたくありません。した事態を解決する考え方として開放閉鎖の原則の考え方があります。修正に対して閉じていなければならない。Interfaceを設けます。その2"と同様にインスタンス化のControllerを設けます。この構成により、変更の多いUI(Presentation)は拡張に対して開いており、修正に対して閉じている状態に変更されます。その1今度は依存関係ではなく、各モジュールの責務に目を向けてみます。上図Domainの責務は2つ存在しています。Interfaceからのデータを加工する等ビジネスロジック実行このためDomainは、2つの変更理由によって修正が加えられます。この問題として、一方の修正によってもう一方のコードに予期せぬ影響を及ぼすかもしれません。した問題への考え方として単一責任の原則があります。この考え方によると一つのモジュールは二つ以上の変更理由で変更されてはなりません。この考えに基づいて、Domainを分割します。Interactorとします。その2次にUI(Presentation)について考えます。UI(Presentation)も責務が2つ存在します。その1"と同じ考え方に基づき分割します。Principle)先ほど分割したControllerとPresenterについて考えます。Interfaceを介して、Applicationが要求するデータ形式でデータを引き渡すことです。一方でPresenterの責務は、Controllerを介してApplicationのデータを受け取ることです。このとき一つの問題が生じます。Controllerに本来責務でない実装が入ってしまいます。InterfaceのリターンをPresentationに渡す実装が必要となります。した問題を解決する考え方にインターフェース分離の原則があります。Boundaryを配置されました。Boundaryを配置されます。この構成にシステム境界線を引いてみます。この図をクリーンアーキテクチャの構成図と見比べてみます。ほとんどの構成が同じではないでしょうか?こうして見て見るとクリーンアーキテクチャの構成がなぜこのような構成が理由をもって理解できるのではないでしょうか?さいごにクリーンアーキテクチャをSOLID原則の観点で見ていきました。順を追ってみていくと既存の考え方の組み合わせのように見えます。