✍️

クリーンアーキテクチャの個人的理解

2023/04/16に公開

動機

仕事でクリーンアーキテクチャとドメイン駆動設計を使用した開発に関わる機会がありました。
しかし、深く理解するには至らず、悔しかったので自分で勉強してみました。

深く理解できていない部分や間違っている部分があるかもしれませんが、優しくご指摘いただけると幸いです。

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

そもそもクリーンアーキテクチャとはこの記事で初めて提唱された考え方です。
親の顔ほど見た以下の同心円を参考に、外側から内側へしか触ってはいけないというルールになっています。

クリーンアーキテクチャのメリットとして以下のようなものが挙げられます。

ぱっと見、あまりにも抽象的で知らない単語が多いです。
各レイヤーについて簡単に説明をしていきます。

Frameworks & Drivers

DBやブラウザ、外部のAPIどの外部世界を示すレイヤーです

Interface Adapters

この層はブラウザやDBなどのアプリケーション外部世界とやり取りをするためのレイヤーです。例えばControllerなどが含まれます。
Use CasesEntitiesがデータを使いやすくなるように変換する役割も担っています。

Application Business Rules

アプリケーション固有のビジネスルールが含まれる層です。
Entitiesが実行されるAPIに依存しないビジネスロジックを含んでいるのに対し、Use CasesではAPIに依存したロジックを含んでいることになります。

しかし、このレイヤーの変更がEntitiesに影響を及ぼすことはありません。アプリケーションの仕様自体が変更されることによってこのレイヤーが影響を受けることは考えられます。

Enterprise Business Rules

アプリケーションに依存しないビジネスルールをカプセル化した層です。
ECサイトを例にすると、商品、ユーザー、お店などがこのレイヤーに属することになります。

また、このレイヤーは外部のアプリケーションのロジックに影響を受けることがありません。
例えばToDoアプリを作成してるとして、叩かれているAPIがcreateでもupdateでもdeleteでもこのレイヤーには影響がありません。
一言で言えば、業務知識をオブジェクトとして表現したレイヤーになります。

このレイヤーから下がドメイン駆動設計になっていきます。

まとめ

今後の更新で実際の実装のサンプルも公開しようと考えています。
ドメイン駆動設計の話もどこかでしたいなぁ、、、、

参考文献

The Clean Architecture
実装クリーンアーキテクチャ
Clean Architecture 達人に学ぶソフトウェアの構造と設計

Discussion