TL;DR
パッケージ名やクラス名から、アプリケーションの機能が分かるようにすること。Robert C. Martin が Clean Architecture で名付けた。
なぜ必要か
アーキテクチャは、使っているフレームワークではなく、システムそのものを伝えるべきである。
アーキテクチャは、システムで使用しているフレームワークではなく、システムそのものについての情報を伝える必要がある。
仕組み
Robert C. Martin のブログ記事によると、家の設計図を見れば玄関や台所から家だと分かり、図書館の設計図なら貸出カウンターや閲覧室から図書館だと分かる。同じように、ソフトウェアの最上位の構造は、使っているフレームワークではなく、ヘルスケアや会計といったシステムのユースケースを表すべきである。
Martin は「フレームワークは使う道具であって、従うべきアーキテクチャではない」として、フレームワークから距離を置くよう勧めている。ユースケースが中心にあり、フレームワークが離れていれば、Web サーバやデータベースなしでユースケースを単体テストできる。Web は配信の仕組みという詳細にすぎない。
例
手を動かしてわかるクリーンアーキテクチャでは、送金を扱う Web アプリケーションのパッケージ構成を、Web 層、ドメイン層、永続化層という層ごとの構成から、account のような機能ごとの構成に変えている。あわせて、SendMoneyService のように、クラスの責務がクラス名から分かるように名前を変えている。
buckpal/
account/
Account
SendMoneyController
AccountRepository
AccountRepositoryImpl
SendMoneyService関連
出典
- Clean Architecture 達人に学ぶソフトウェアの構造と設計
- 手を動かしてわかるクリーンアーキテクチャ 第4章 パッケージ構成に関する戦略
- Screaming Architecture - The Clean Code Blog