🏘️

自分なりにClean Architectureを理解する

2021/01/02に公開

概要

Clean Architectureに関して自分なりに可能な限り簡潔にまとめてみました。

Clean Architectureで達成する事

関心の分離

関心の分離により達成できる事

関心の分離によって、下記のことを達成できる。

(1) フレームワーク非依存

アーキテクチャは、機能満載のソフトウェアのライブラリに依存していない。これにより、システムをフレームワークの制約で縛るのではなく、フレームワークをツールとして使用できる。

(2) テスト可能

ビジネスルール(ソフトウェアの核心)は、UI、データベース、ウェブサーバー、その他の外部要素がなくてもテストできる。

(3) UI非依存

UIは、システムのほかの部分を変更することなく、簡単に変更できる。たとえば、ビジネ

スルールを変更することなく、ウェブUIをコンソールUIに置き換えることができる。

(4) データベース非依存

OracleやSQL ServerをMongo、BigTable、CouchDBなどに置き換えることができる。ビジネスルールはデータベースに束縛されていない。

(5) 外部エージェント非依存

ビジネスルールは、外界のインターフェイスについて何も知らない。

Clean Architecture概要

依存関係は内側一方向のみで、外側のルールを、内側に持ち込んではいけない。

つまり、内側の層では外側の層の実装を知ってはならず、また一切影響を受けてはならない。

https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28464/11d18689-9a99-5bc0-39dc-e48623f1d11c.jpeg

図を各レイヤーごとに理解する

エンタープライズビジネスルール(Entities)

  • システムが自動化されていなくても存在する最重要ビジネスルール・最重要ビジネスデータをカプセル化したもの
  • システムの中で最も独立していて、最も再利用可能であるべき

アプリケーションビジネスルール(Use Cases)

  • アプリケーション固有のビジネスルールを記述する
  • エンタープライズビジネスルールをいつ・どのように呼び出すかを規定したルール が含まれている

インターフェースアダプター(Controllers/Presenters/Gateways)

  • 内側(Entities/Usecases)と外部(DB・Webフレームワーク)でデータフォーマットをそれぞれ便利な形式に変換するアダプター

フレームワークとドライバー(UI/Web/Devices/DB/External Interfaces)

  • フレームワークやツールで構成されている(DB, Webフレームワーク等)

参考

Discussion