Open2

クリーンアーキテクチャーについて

まさぴょんまさぴょん

クリーンアーキテクチャーとは?

  • クリーンアーキテクチャとは、アプリケーションの設計方法を説く設計思想です。
  • Robert C. Martin(Uncle Bob)氏が2012年に提唱しました。
    • 通称、ボブおじさん🌟
  • クリーンアーキテクチャの目的は、主に「テスト容易性」や「変更容易性」です。
  • そのため、ビジネスロジック(ドメイン)を中心に置き、インターフェースの層や技術を外側に配置する設計アプローチです。
  • クリーンアーキテクチャは、依存の方向性、責務の分離(関心の分離)、依存性逆転の法則を重視します。
  • この基準に沿った構成にすることで、責務が分離され変更に強くなりテスタブルになります。

クリーンアーキテクチャーのルール

  • クリーンアーキテクチャのルールは次のとおりです。
    • ソフトウェアをレイヤーに分割して関心事を分離する
    • ソースコードは円の内側(抽象)の方向に依存する
    • 制御の流れと依存関係を逆転させて依存の方向を制御する

クリーンアーキテクチャが重要視していること

  • クリーンアーキテクチャは、特段新しい考えやアプローチではありません。
  • 関係性の分離やSOLID原則を特に尊重した設計方針なのです。
  • 個人的にはSOLID原則のうち以下の二つが特に強く現れていると思います。
  1. 依存性逆転(DIP)の原則
    • ドメイン層(ビジネスルールなどが配置される)が技術的な詳細に依存しないようにする上でこの原則を使う
  2. 単一責任の原則
    • 各層が一つだけの責任を持つためにこの原則を使う。
    • Enterprise Business Rules層(ドメイン層)はビジネスルールを担当し、Frameworks & Drivers層(インフラ層)は技術の詳細を担当するなど

特に、依存性逆転の原則はクリーンアーキテクチャの本質でもあるので、あらかじめ理解しておいてください。

  • クリーンアーキテクチャはビジネスルールを中心に置き、技術的な詳細は外側に追いやる設計
  • ビジネスルールが技術的詳細に依存してはならない。技術的詳細がビジネスルールに依存しなければならない
    • それを実現するために依存性逆転の原則(DIP)が関わってくる
  • 同心円の図の通り層を再現する必要はない。依存関係を適切にコントロールすることが重要

参考・引用

https://zenn.dev/ayumukob/articles/ff183004d09ede

https://qiita.com/tatsuya_1995/items/d0f11bae2ef76495ecec

https://zenn.dev/flutteruniv/books/flutter-architecture/viewer/5_layered-architecture

https://qiita.com/o-y/items/755cb47f733687e8331f

https://zenn.dev/sre_holdings/articles/a57f088e9ca07d

https://gist.github.com/mpppk/609d592f25cab9312654b39f1b357c60