ストラテジパターン - すとらてじぱたーん

無数のStrategyクラスが積み重なり、頂点だけが光る複雑な塔のイラスト
戦略を積み重ねるほど、頂上だけがわずかに光る孤独な構造物。
テクノロジー・科学

説明

ストラテジパターンとは、プログラムにおける戦略をまるでコレクションのように扱い、気まぐれに付け替えることを美徳と称する、オブジェクト指向の宴会芸である。実装者は『拡張には開放、修正には閉鎖』という一見かっこいい格言を振りかざしつつ、実際は複雑化の泥沼へ自ら飛び込む。選択肢が増えるほど心は軽くなるどころか、むしろ設計図に刻まれた選択肢の数だけ苦しみが増える。責任を切り分けたつもりが、むしろ誰がバグを作ったかわからないジャングルが出来上がる。だがその混乱こそが『戦略的』だと信じ込む人々の、最後の楽しみである。

定義

  • 異なるアルゴリズムを交換可能に見せかけ、真の複雑さをカプセル化するオブジェクト指向のお守り。
  • 『拡張には開放、修正には閉鎖』という格言をお題にした、設計者の自己満足装置。
  • 戦略の数だけインタフェースを生み出し、コードベースを無限再帰へ誘う誘蛾灯。
  • アルゴリズム切り替えという名の、デバッグ地獄への片道切符。
  • 決断先送りの美学を、クラス階層の中に昇華させた設計のスフィンクス。
  • 設計パズルのピースが増えるほど、完成図は霞む壮大な迷宮。
  • 単一責任原則と衝突しつつも、無意味に責務を切り分けて安心感を与える幻の仕組み。
  • 選択肢を増やすほどコードが笑顔を失う、皮肉の具現化。
  • 柔軟性という名の棺桶にコードを詰め込む、微笑みをたたえた設計図。
  • 責任転嫁を可能にするが、転がるバグは誰も止められない死の輪廻。

用例

  • 「戦略を追加しましたか?ええ、クラスが10個増えましたとも。」
  • 「この戦略、またInterfaceを増やすんですか?開発者の寿命は削減される一方ですよ。」
  • 「ストラテジパターンは万能ですよ、…ただし使いすぎると誰も理解できなくなりますが。」
  • 「新しい戦略を実装した?テストを書くほどの勇気はないんだろう?」
  • 「ここをStrategyに切り替えればSOLID原則ってやつに近づきますよ、たぶん。」
  • 「バグ?いや、あれは新機能の一種だよ。戦略の意図とは異なる進化さ。」
  • 「設計書にStrategyって書いただけで、俺は天才扱いされたんだ。」
  • 「依存性注入?それよりまず戦略の数を減らそうぜ、胸が痛いよ。」
  • 「モジュール化した結果、どこにそのアルゴリズムがあるか誰も知らないんだ。」
  • 「ストラテジパターンをやめる勇気がある開発者はいないのか?」

語り

  • コードレビューで戦略が増えすぎだと指摘され、設計者は誇らしげに10層のStrategy階層を見せつけた。
  • 戦略を切り替えるボタンは実装されず、結局手動でソースを入れ替えるその不便さに誰も気づかないふりをした。
  • リファクタリングの結果、Strategyという名のクラスだけが空のまま放置された。
  • 新機能のたびに戦略を作り、気づけば200を超えたアルゴリズムの墓場ができあがっていた。
  • 戦略を注入する仕組みは動かず、いつもデフォルト戦略が勝手に選ばれる不思議な現象が発生した。
  • ドキュメントには『戦略を選べ』とだけ書かれ、誰もどれを使うべきか教えてくれなかった。
  • プロダクトオーナーが『もっと戦略を!』と叫ぶたびに、実装者は新しいクラスを生み出し続けた。
  • 戦略パターンを導入したプロジェクトは、始まる前から終わりの見えない迷宮だった。
  • デバッグ中、どのStrategyで問題が起きているのかを突き止めるために、設計者は3日間のハイキングに出た。
  • 戦略パラメータの数が増えすぎて、設定ファイルはもはや人類未踏の難読言語と化していた。

関連語

別名称

  • 戦略カード集め
  • クラス階層の宴
  • アルゴリズム万華鏡
  • 責任回避装置
  • 多言語コード症候群
  • 設計パズル
  • 無限インタフェース
  • 切り替えマニア
  • 戦術迷路
  • カプセル化の罠

同義語

  • 選択肢地獄
  • 切替祭り
  • 設計の怪物
  • モジュールの逆襲
  • コード迷宮
  • アルゴリズム遊園地
  • 機能肥大症
  • 抽象の刃
  • 依存性パズル
  • オプション地帯

キーワード