🏘️
自分なりにClean Architectureを理解する
概要
Clean Architectureに関して自分なりに可能な限り簡潔にまとめてみました。
Clean Architectureで達成する事
関心の分離
関心の分離により達成できる事
関心の分離によって、下記のことを達成できる。
(1) フレームワーク非依存
アーキテクチャは、機能満載のソフトウェアのライブラリに依存していない。これにより、システムをフレームワークの制約で縛るのではなく、フレームワークをツールとして使用できる。
(2) テスト可能
ビジネスルール(ソフトウェアの核心)は、UI、データベース、ウェブサーバー、その他の外部要素がなくてもテストできる。
(3) UI非依存
UIは、システムのほかの部分を変更することなく、簡単に変更できる。たとえば、ビジネ
スルールを変更することなく、ウェブUIをコンソールUIに置き換えることができる。
(4) データベース非依存
OracleやSQL ServerをMongo、BigTable、CouchDBなどに置き換えることができる。ビジネスルールはデータベースに束縛されていない。
(5) 外部エージェント非依存
ビジネスルールは、外界のインターフェイスについて何も知らない。
Clean Architecture概要
依存関係は内側一方向のみで、外側のルールを、内側に持ち込んではいけない。
つまり、内側の層では外側の層の実装を知ってはならず、また一切影響を受けてはならない。
図を各レイヤーごとに理解する
エンタープライズビジネスルール(Entities)
- システムが自動化されていなくても存在する最重要ビジネスルール・最重要ビジネスデータをカプセル化したもの
- システムの中で最も独立していて、最も再利用可能であるべき
アプリケーションビジネスルール(Use Cases)
- アプリケーション固有のビジネスルールを記述する
- エンタープライズビジネスルールをいつ・どのように呼び出すかを規定したルール が含まれている
インターフェースアダプター(Controllers/Presenters/Gateways)
- 内側(Entities/Usecases)と外部(DB・Webフレームワーク)でデータフォーマットをそれぞれ便利な形式に変換するアダプター
フレームワークとドライバー(UI/Web/Devices/DB/External Interfaces)
- フレームワークやツールで構成されている(DB, Webフレームワーク等)
Discussion