クリーンアーキテクチャの個人的理解
動機
仕事でクリーンアーキテクチャとドメイン駆動設計を使用した開発に関わる機会がありました。
しかし、深く理解するには至らず、悔しかったので自分で勉強してみました。
深く理解できていない部分や間違っている部分があるかもしれませんが、優しくご指摘いただけると幸いです。
クリーンアーキテクチャについて
そもそもクリーンアーキテクチャとはこの記事で初めて提唱された考え方です。
親の顔ほど見た以下の同心円を参考に、外側から内側へしか触ってはいけないというルールになっています。
クリーンアーキテクチャのメリットとして以下のようなものが挙げられます。
ぱっと見、あまりにも抽象的で知らない単語が多いです。
各レイヤーについて簡単に説明をしていきます。
Frameworks & Drivers
DBやブラウザ、外部のAPIどの外部世界を示すレイヤーです
Interface Adapters
この層はブラウザやDBなどのアプリケーション外部世界とやり取りをするためのレイヤーです。例えばControllerなどが含まれます。
Use Cases
やEntities
がデータを使いやすくなるように変換する役割も担っています。
Application Business Rules
アプリケーション固有のビジネスルールが含まれる層です。
Entities
が実行されるAPIに依存しないビジネスロジックを含んでいるのに対し、Use Cases
ではAPIに依存したロジックを含んでいることになります。
しかし、このレイヤーの変更がEntities
に影響を及ぼすことはありません。アプリケーションの仕様自体が変更されることによってこのレイヤーが影響を受けることは考えられます。
Enterprise Business Rules
アプリケーションに依存しないビジネスルールをカプセル化した層です。
ECサイトを例にすると、商品、ユーザー、お店などがこのレイヤーに属することになります。
また、このレイヤーは外部のアプリケーションのロジックに影響を受けることがありません。
例えばToDoアプリを作成してるとして、叩かれているAPIがcreateでもupdateでもdeleteでもこのレイヤーには影響がありません。
一言で言えば、業務知識をオブジェクトとして表現したレイヤーになります。
このレイヤーから下がドメイン駆動設計になっていきます。
まとめ
今後の更新で実際の実装のサンプルも公開しようと考えています。
ドメイン駆動設計の話もどこかでしたいなぁ、、、、
参考文献
The Clean Architecture
実装クリーンアーキテクチャ
Clean Architecture 達人に学ぶソフトウェアの構造と設計
Discussion