困りごとを抱えた依頼人のコードを、見習い魔術師ルークが直していく全12話の連載です。ルークは覚えたての技を盛りたくなっては失敗し(終盤の2話では踏みとどまり)、師匠の問いかけから、ちょうどいい設計にたどり着きます。実装は Kotlin です。
どの話からでも読めます。Kotlin の構文は、主なものを出てきた近くで説明します。直す前と後のコードを見比べて、何が変わったかを追えれば十分です。
このページは目次を兼ねた案内板です。初めてなら「まず読むなら」の3本から、手元に困っているコードがあるなら「困りごとから探す」から選んでください。
まず読むなら
- Strategy — 割引を足すたびに式が暴れる回。条件分岐の増殖は多くの現場で出会う困りごとで、盛りすぎて自滅するルークの失敗も含め、連載の型がいちばん素直に出る
- Null安全 — 検索で null を踏んで止まる回。パターン名を知らなくても、Kotlin を書くなら明日のコードにそのまま使える
- State — フラグを増やした末に、ありえない状態へ入り込む回。真偽値フラグを3本ほど並べたコードを抱えているなら、いちばん効く
困りごとから探す
条件分岐が増えて、足すたびにどこかが壊れる
- Strategy — 割引ごとに分かれた式
- State — フラグの組み合わせで管理する許可証の状態
- Factory Method — 通知の種類ごとに、全部の窓口へ書き足した振り分け
変更が広がる、1つ直すと別の所が壊れる
null や共有で、値が思わぬ形に変わる
手を入れられないもの、戻せないものがある
設計を盛りすぎていないか不安になる
全話一覧
- 割引を1つ足すたびに、別の客の割引まで狂う。算法を差し替え可能な部品に切り出す【Strategy】
- 棚にない本を検索すると処理が止まる。「空かもしれない」を型で表して受け止める【Null安全】
- コピーした座標を動かすと元まで動いて、触っていない所に誤配する。書き換えられない値にして防ぐ【不変オブジェクト】
- 通知の種類を足すたびに、全部の窓口へ同じ振り分けを書き足す。生成を1か所に集める【Factory Method】
- トッピングの組み合わせごとにクラスが倍々に増える。包んで重ねる部品にする【Decorator】
- 通知先を足すたびに、在庫処理の本体を開いて書き換えている。知らせる側と受ける側を切り離す【Observer】
- 却下したはずの許可証が、承認済みと表示される。ありえない状態を型で作れなくする【State】
- 作り変えられない外部の形式を、共通の形で扱いたい。間に変換役を挟む【Adapter】
- 操作が直接データを書き換えるだけで、元に戻せず試せない。操作をオブジェクトにして undo/redo する【Command】
- まだ誰も頼んでいない拡張の仕組みを盛りたくなる。重複だけを Template Method で畳む【YAGNI】
- 神クラスを手順で分けたら、かえって絡まった。責務で分けて窓口1つで隠す【Facade】
- 覚えた設計を全部使いたくなる。必要な部品だけを選んで短く収める【KISS】
