この場合、「ドメイン」パッケージと「インフラストラクチャ」パッケージが相互参照しており、循環依存がある状態です。 この状態で「インフラストラクチャ」パッケージに含まれるクラスを修正すると、相互参照している「ドメイン」パッケージだけではなく、「ドメイン」パッケージに依存している「アプリケーション」パッケージと「ユーザインタフェース」パッケージにまで影響範囲が及んでしまいます。 このように、パッケージ間に循環依存がある状態というのは、望ましくない状態であると言えます。 では、パッケージの依存関係をどのようにチェックしたら良いでしょうか? クラス数/パッケージ数が少ないうちは人力でもなんとかなるかもしれませんが、ある程度の規模になるとそれは非常に困難になります。 そこでツールを活用することにします。先に挙げた本で紹介されているパッケージのメトリクス情報を計測することが出来るツール類がいくつも公開
![パッケージ間の循環依存を自動で検出する | GuildWorks Blog](https://cdn-ak-scissors.b.st-hatena.com/image/square/0ecc4f0e2917cf9eed95be3d04801695246d78ed/height=288;version=1;width=512/https%3A%2F%2Fguildworksblog.files.wordpress.com%2F2014%2F09%2Fapache-commons-lang-cycle2.png%3Fw%3D634)