TL;DR
提供する機能に比べて、インタフェースが複雑なモジュール。深いモジュールの反対であり、レッドフラグの 1 つである。
なぜ必要か
浅いモジュールを見分けられると、複雑さを増やしている箇所に気づける。浅いモジュールでは、インタフェースを学んで使うコストが、モジュールがもたらす効果(内部の動作を知らなくてよいこと)を上回る。費用対効果が悪く、複雑さを管理する上で役に立たない。
仕組み
小さなモジュールは浅くなりがちである。実装が短いと、抽象化が隠せる詳細も少なく、インタフェースの複雑さが実装の複雑さとほとんど変わらなくなる。クラスやメソッドを細かく分けすぎて浅いクラスが大量に生まれた状態を、Classitisと呼ぶ。
例
連結リストを実装するクラスや、次のように 1 行の処理をラップしただけのメソッドが典型である。
private void addNullValueForAttribute(String attribute) {
data.put(attribute, null);
}注意点
浅いモジュールが避けられない場合もある。