はじめに
クリーンアーキテクチャについての理解をまとめようと思います。誤っている部分やディスカッションなどあればコメント頂けたら嬉しいです。
記事の構成
- Clean Architecture超概要編(前半)
章構成: 要約 = 手段 + 効果
今ここ👆 - Clean Architecture概要編(中半)
章構成: 手段の説明 - Clean Architectureソース解説編(後半)
Clean Architectureの要約
クリーンアーキテクチャはソフトウェアアーキテクチャの設計パターンの一つで、、Robert C. Martin(通称ボブ・マーチン)により提唱されました。ソフトウェアの設計と構造を整理し、保守性や拡張性を向上させることを目指します。
具体的には、①各レイヤー(コンポーネント)の独立性を確保し、②依存関係の方向性を定義することで、ソースコードへの変更がシステム全体に及ぼす影響を最小限に抑え、テストの容易さを実現します。
実現のステップ(手段)
1. レイヤーを独立させる
各レイヤー(コンポーネント)が独立しており、それぞれが単一の責任を持つことで、システムが柔軟かつ拡張可能になります。
またレイヤー内のクラスにおいても単一の責務にする必要がある(単一責務の原則)
一般的にはドメイン層がインフラ層に依存しているため、ドメイン層のビジネスロジックの変更がインフラ層に影響が出てしまう。
2. 依存の方向性を決定(依存性逆転の原則)
依存性のルールが定義し、外部の変更が内部のビジネスロジックに影響を与えにくい構造にします。
通常は、内部ロジックは外部システムやDB, UI(変更が多い層)に依存しますが、その逆で内部ロジック(変更が少ない層)に依存するようにします。

効果
ソフトウェアを複数のレイヤーに分けることで関心の分離を達成します。これにより、ビジネスルール専用のレイヤーとインターフェイス専用のレイヤーが確立されます。
これらのアーキテクチャアプローチは、以下のような特徴を持つシステムを生み出します:
- 変更への柔軟性とメンテナンスの容易さ。
- 明確な責任分担によるコードの理解性と再利用性の向上。
- テストしやすい構造による品質の維持と向上。
参考
| https://gist.github.com/mpppk/609d592f25cab9312654b39f1b357c60