循環依存クラスター
ID: cycle_clusters | Severity: Critical (default)
循環依存クラスターは、相互に関連する循環依存のセットであり、複雑な依存関係の網を形成します。単純な循環(A -> B -> A)とは異なり、クラスターには複数の重複する循環が含まれます(例:A -> B -> C -> A および B -> D -> C -> B)。
なぜこれが問題なのか
- アーキテクチャの腐敗: クラスターは多くの場合、複数のコンポーネント間の明確な境界の欠如を示しています。
- 極端な結合: クラスター全体を単一のモノリシックなユニットとして扱う必要があります。
- 隔離の不可能: クラスター内の他のすべてのモジュールに影響を与えずに、1つのモジュールを変更またはテストすることはほぼ不可能です。
- メンテナンスの悪夢: クラスターのいずれかの部分を変更すると、関連するすべてのモジュールに予測できない影響を与える可能性があります。
例
悪い例
"core" ディレクトリ内のモジュール群で、ほぼすべてのモジュールが同じディレクトリから他の複数のモジュールをインポートし、複数の重複する循環を作成している。
良い例
モジュールは階層構造で、または明確なインターフェースベースのデカップリングを使用して編成され、循環がクラスターを形成しないようにする必要があります。
設定
yaml
rules:
cycle_clusters:
severity: high
max_cluster_size: 5修正方法
- ハブを壊す: 複数の循環に関与する「ハブ」モジュールを特定し、最初にそれらをデカップリングします。
- レイヤリング: 水平方向または上方向の依存関係を防ぐために、厳格なレイヤリングルールを強制します。
- モノリスの再構築: クラスターは、単一の大きなモジュールが正しく分割されなかったことを示していることがよくあります。マージするか、別の境界に沿って再分割することを検討してください。