ラザニアコードとは?ざっくりと3行で
- プログラムの階層(レイヤー)が幾重にも積み重なりすぎて、中身がどうなっているのか一見して分からない複雑な状態のことだよ!
- 整理整頓しようとして箱(クラスや関数)を分けすぎた結果、たらい回しにされるだけで実処理がどこにあるか見つからないんだ。
- これだと、たった一行の修正をするために何十個ものファイルを開いて書き換える羽目になるよ。

【深掘り】これだけ知ってればOK!
スパゲッティコードがぐちゃぐちゃに絡まり合った状態なら、「ラザニアコード」は層と層が密着しすぎて分離できない状態です。
例えば、画面に文字を表示するだけの機能なのに、「表示係」→「仲介係A」→「仲介係B」→「データ取得係」…と無駄に役割分担をしすぎているケースです。これでは、文字の色を変えたいだけなのに、関わっている全ての係(レイヤー)に変更依頼を出さなければならず、修正コストが跳ね上がります。
会話での使われ方

この機能追加、ロジックは簡単なのにラザニアコードのせいで修正ファイルが10個もあるよ。




綺麗に分離しようとするのは良いけど、これじゃラザニアになって追いにくいね。




スパゲッティよりはマシだけど、このラザニアの層、一枚抜いても動くよね?
【まとめ】3つのポイント
- 過剰包装のプレゼント:小さな箱の中にさらに箱があり、いつまで経っても中身(処理)が出てこない状態。
- 修正のドミノ倒し:一つの層を変更すると、上下の層すべてに影響が及び、修正作業が連鎖する。
- 行き過ぎた抽象化:将来の拡張性を気にしすぎて、現在の単純な処理を複雑にしてしまっている。
よくある質問
- Qラザニアコードはいつ発生しやすいですか?
- A大規模なフレームワークを導入した時や、初心者が設計パターン(MVCなど)を「形だけ」真似して、意味を考えずに実装した時によく発生します。
- Qラザニアコードを直すコツはありますか?
- A何もしない層(パススルー)を見つけて削除することです。データをただ右から左へ渡すだけのクラスやメソッドは、あえて統合(インライン化)してシンプルにする勇気が必要です。
- Qラザニアコードの具体例は何ですか?
- Aデータベースから値を取るだけの処理で、Interface、AbstractClass、BaseClass、ImplementationClassと継承関係が深すぎて、元の定義がどこにあるか分からないコードなどが挙げられます。
- Qラザニアコードとスパゲッティコードとの違いは何ですか?
- Aスパゲッティは構造がなく、絡まっている(無秩序)状態です。ラザニアは構造はあるが、層が多すぎて分離できない(過剰な秩序)状態です。どちらも修正しにくい点は同じです。



コメント