##前書き
クリーンアーキテクチャってよくわからなかったので、自分用に概要まとめてみました。
細かいとこまで理解できてるか怪しい。。
##クリーンアーキテクチャとは
依存関係が一方通行となるような設計
#各層のイメージ
webページなんでもいいんだけど一旦、Qiitaでイメージしてみる。(このイメージはフィクションです。実際のアーキテクチャとは一切関係ありません。)
Frameworks & Drivers層
DevicesとWebとUI→PCでクローム使ってQiitaを見ようとする。
DB→Qiitaの記事情報を保存している。
ExternalInterfaces→記事の中に出てくる広告をAPI経由で取得する。
Interface Adapters層
Presenters→MVCのビュー(HTML、CSS、JS)
Controllers→MVCのコントローラー、リクエストの振り分け。
Gateways→実際に外部DBへアクセスする処理(UseCasesのInterfaceを実装したrepositry)
Application Business Rules層
UseCases→記事単体の情報取得、記事一覧の情報を取得などビジネスロジックを記載。(外部接続用のInterfaceなどもここ)
Enterprise Business Rules層
Entities→記事の情報(タイトル、本文、日付、投稿者など)
##ポイント
クリーンアーキテクチャで実現したいことは依存の方向を統一し、仮に円の外側のコンポーネントが入れ替わってもより円の中心のロジックには影響を与えないようにすること。
そのため基本的には依存関係と制御フローは同じになることが多いのでそこを一部調整する必要がある。
例えばDBアクセスのSQLを直接UseCasesに書いておくとすると、DBではなくファイルからデータを取得したいと変更する場合UseCasesを修正する必要がある。そのためUseCasesにはデータを取得するというInterfaceを用意しておきアクセスする先がDBなのかファイルなのかによってGatewaysでそれぞれInterfaceを実装することによってUseCases内に影響を与えなくすることができる。
##まとめ
クリーンアーキテクチャは一つ一つのコンポーネントを分離し依存方向を明確にすることを目的としたアーキテクチャと言える。