Skip to content

散弾銃の手術 (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

Released under the MIT License.