散弾銃の手術 (Shotgun Surgery)
ID: shotgun_surgery | 重要度: Medium (default)
散弾銃の手術は、要件の単一の変更によって、多くの異なるモジュールに対して多数の小さな変更を行う必要がある場合に発生します。archlint は、git履歴を分析して頻繁に一緒に変更されるファイル(高い同時変更頻度)を見つけることで、これを検出します。
なぜこれが「不吉な臭い」なのか
- 高いメンテナンスコスト: すべての機能追加やバグ修正で、システムの複数の部分に触れる必要があります。
- エラーを起こしやすい: 必要な多くの変更のうち1つを見落としやすく、バグにつながります。
- カプセル化の欠如: 単一の責任が1つの場所にカプセル化されるのではなく、コードベース全体に分散していることを示しています。
修正方法
- 責任の統合: Move Method または Move Field を使用して、関連するロジックを単一のモジュールに集約します。
- Introduce Parameter Object (引数オブジェクトの導入): 複数のモジュールが同じデータセットを必要とする場合、それを単一のオブジェクトにグループ化します。
- Replace Data Value with Object: 多くのモジュールが同じプリミティブデータを処理している場合、そのデータとその振る舞いを新しいクラスにカプセル化します。
設定
yaml
rules:
shotgun_surgery:
severity: medium