非循環依存関係の原則(Acyclic Dependencies Principle: ADP)
1. 原則
コンポーネント間の依存関係は、循環してはならない
- コンポーネント間の依存関係グラフが循環しないように設計する必要がある
2. 根拠
ビルドとテストの効率化
- 循環依存があると、コンポーネントのビルド順序が複雑になり、ビルド時間が長くなる可能性がある。また、テストも複雑になり、テスト効率が低下する
リリースの容易化
- 循環依存があると、コンポーネントを個別にリリースすることが困難になる。これにより、リリース作業が複雑になり、リリース頻度が低下する
システムの理解と保守性の向上
- 循環依存は、システムの依存関係を複雑にし、システムの理解と保守を困難になる
- 非循環依存関係にすることで、依存関係が明確になり、システムの理解と保守が容易になる
3. 指針
依存関係の可視化
- コンポーネント間の依存関係をグラフなどで可視化し、循環依存の有無を確認する
依存関係の整理
- 循環依存を発見した場合、依存関係の方向を調整したり、依存関係を解消したりすることで、非循環依存関係になるように整理する
依存関係逆転の原則(DIP)の適用
- 依存関係逆転の原則を適用することで、上位レベルのコンポーネントが下位レベルのコンポーネントに依存するのではなく、抽象に依存するように設計し、循環依存を回避する
コンポーネントの分割
- 循環依存が発生しているコンポーネントを分割し、依存関係を整理する
4. 注意事項
過度な依存関係の排除
- 過度に依存関係を排除すると、システムの柔軟性が低下し、変更に対応しにくくなる
抽象化の適切な利用
- 抽象化を利用して依存関係を解消する場合には、抽象化のレベルを適切に設定しなければならない
他の原則とのバランス
- 他のコンポーネント設計原則(安定依存の原則、安定度抽象度等価の原則など)と合わせて考慮する必要がある
参考資料