TL;DR

アーキテクチャは抽象的な概念でしかなく、コードと直接結びつかない、という乖離のこと。モデル対コード間ギャップとも呼ぶ。

なぜ必要か

パッケージ構成がアーキテクチャを反映しなくなると、時間がたつにつれて、コードベースはアーキテクチャからかけ離れたものになる。どんなパッケージ構成でも、維持するにはプロジェクトに規律を課す必要があり、それができないとこのギャップが生じる。

仕組み

手を動かしてわかるクリーンアーキテクチャでは、アーキテクチャの構成要素を意識したパッケージ構成にすることで、このギャップを解消できるとしている。ヘキサゴナルアーキテクチャなら、エンティティ、ユースケース、ポートとアダプタをそれぞれパッケージに落とし込む。

buckpal/
  adapter/
    in/web/SendMoneyController
    out/persistence/AccountPersistenceAdapter
  application/
    domain/
      model/Account
      service/SendMoneyService
    port/
      in/SendMoneyUseCase
      out/UpdateAccountStatePort
  common/

パッケージの数が増えると、いま書いているコードをどのパッケージに入れるべきかを考える必要が出てくる。そのため、開発者がアーキテクチャについて能動的に考えるようになる。

関連

出典