Featured image of post 遺跡のコードを直しながら、GoFデザインパターンをたどる冒険【目次】

遺跡のコードを直しながら、GoFデザインパターンをたどる冒険【目次】

GoF のデザインパターン23種と Null Object を、遺跡のコードを直す冒険として1話ずつ書いた全24話の目次です。実装は Perl と Moo です。

「コード考古学者ハリスの冒険」は、レガシーコードの遺跡を考古学者ハリスと相棒のギズモが調べ、GoF のデザインパターンで直していく全24話の連載です。GoF の23種に、Null Object を加えた24本です。各話では、遺跡のコードが抱えた困りごとを見立て、パターンで直すまでを冒険物語としてたどります。

どの話からでも読めます。実装は Perl と Moo ですが、コードを書き慣れている必要はありません。直す前と後のコードを見比べて、何が変わったかを追えれば十分です。

このページは目次を兼ねた案内板です。初めてなら「まず読むなら」の3本から、手元に困っているコードがあるなら「困りごとから探す」から、パターン名で引きたいなら「GoF の分類で探す」から選んでください。

まず読むなら

  • Factory Method — 環境が増えるたびに膨らむ if/elsif を、道具の選択と生成を分けて片付ける回。多くの現場で最初に出会う困りごとで、ほかのパターンを読む足場になる
  • Null Object — undef チェックを1か所書き忘れて落ちる回。Perl を書いているなら一度は踏む罠で、明日のコードにそのまま使える
  • Facade — 決まった順に呼ばないと壊れる部品群を、窓口1つにまとめる回。途中で失敗したときの巻き戻しまで扱うので、手順書をコードに置き換える実例になる

困りごとから探す

条件分岐が伸び続けて、足すたびに本体を書き換えている

  • Factory Method — 環境ごとに道具を作り分ける if/elsif
  • Strategy — 罠ごとに防御を書き分ける defend メソッド
  • State — 状態を確かめる if-else が並んだタレットの制御
  • Chain of Responsibility — 権限チェックを全部抱え込んだゲート
  • Composite — 部品か集合体かを ref と isa で見分ける再帰処理
  • Visitor — 型ごとに処理を書き分ける呼び出し側
  • Interpreter — 正規表現の場当たりな解析に条件を足せない

コピペや、組み合わせごとのクラスが増えていく

  • Template Method — 同じ流れの解除コードを10個コピペしている
  • Decorator — 継承では暗視と熱感知の組み合わせごとにクラスが要る
  • Bridge — 継承とロールを合わせたら同名メソッドが衝突した

同じはずのオブジェクトが食い違う、不完全なまま使われる

  • Singleton — 同じクラスなのに別のインスタンスを見ていて、認証が通らない
  • Abstract Factory — 砂漠用の防護服に氷雪用の動力炉が組み合わさる
  • Builder — 引数が散らばって未完成のオブジェクトが出回る
  • Prototype — 複製したのに、片方の変更がもう片方を壊す
  • Null Object — undef の判定漏れで処理が止まる

部品同士が直接呼び合っていて、1つ足すと全体が揺れる

  • Mediator — 互いを直接参照して、依存が網の目になったモジュール群
  • Observer — 検知した側がブザー、扉、照明を1つずつ呼んでいる

重い、遠い、データの形がばらばら

  • Flyweight — 数千体のゴーレムが同じ設定を抱えてメモリが尽きる
  • Proxy — 遠くて重いデータ源へのアクセス制御とキャッシュ
  • Iterator — 配列と連結リストが混在していて、走査が構造に縛られる

古い仕組みに合わせたい、手順を間違えると壊れる

  • Adapter — メソッド名もデータの形も違う古い端末を、今のスキャナーで読みたい
  • Facade — バルブ、ダクト、点火を決まった順に呼ばないと爆発する

操作や状態を元に戻したい

  • Command — レバーが機器を直接呼んでいて、取り消しも履歴もない
  • Memento — カプセル化を壊さずに、状態を退避して戻したい

GoF の分類で探す

生成に関するパターン (Creational Patterns)

構造に関するパターン (Structural Patterns)

振る舞いに関するパターン (Behavioral Patterns)

Null Object は GoF の23種には含まれません。この連載では、undef の扱いを整理する補助の1本として、振る舞いのパターンに並べています。

comments powered by Disqus
システム開発・AIワークフローのご相談は Meetsource へ
Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。