TL;DR

パッケージ名やクラス名から、アプリケーションの機能が分かるようにすること。Robert C. Martin が Clean Architecture で名付けた。

なぜ必要か

アーキテクチャは、使っているフレームワークではなく、システムそのものを伝えるべきである。

アーキテクチャは、システムで使用しているフレームワークではなく、システムそのものについての情報を伝える必要がある。

仕組み

Robert C. Martin のブログ記事によると、家の設計図を見れば玄関や台所から家だと分かり、図書館の設計図なら貸出カウンターや閲覧室から図書館だと分かる。同じように、ソフトウェアの最上位の構造は、使っているフレームワークではなく、ヘルスケアや会計といったシステムのユースケースを表すべきである。

Martin は「フレームワークは使う道具であって、従うべきアーキテクチャではない」として、フレームワークから距離を置くよう勧めている。ユースケースが中心にあり、フレームワークが離れていれば、Web サーバやデータベースなしでユースケースを単体テストできる。Web は配信の仕組みという詳細にすぎない。

例

手を動かしてわかるクリーンアーキテクチャでは、送金を扱う Web アプリケーションのパッケージ構成を、Web 層、ドメイン層、永続化層という層ごとの構成から、account のような機能ごとの構成に変えている。あわせて、SendMoneyService のように、クラスの責務がクラス名から分かるように名前を変えている。

buckpal/
  account/
    Account
    SendMoneyController
    AccountRepository
    AccountRepositoryImpl
    SendMoneyService

関連

出典