Perl と Moo で天気情報ツールを作りながら、Adapter パターンにたどり着く全5回の連載です。天気を返すクラスを1つ作り、メソッド名も戻り値も違う古い API を足して困り、その API を包んで同じ呼び方に揃え、3つ目のサービスも足して1つのループで回します。第5回で、作ってきた橋渡しクラスが GoF の Adapter パターンだったと名前を付けます。
各回は前の回のコードに足していく作りなので、通して読むなら第1回からが早道です。このページは目次を兼ねた案内板です。入口は「どこから読むか」で、困りごとが決まっているなら「困りごとから探す」で、順に追うなら「全話一覧」で選んでください。
対象は、Perl 入学式を卒業し、Moo で has とメソッドを書いたことがある方です。Moo が初めてなら、前シリーズ「Mooで覚えるオブジェクト指向プログラミング」の目次(このページの最後にリンクがあります)から読んでください。Perl v5.36 以降の signatures を使い、依存モジュールは cpanm Moo で入ります。天気データはコード内の固定値で、外部の API にはつなぎません。
どこから読むか
- 第1回 — Moo のクラスを1つ作るところから始めたいなら。第2回で、形の違う API を足して困る
- 第2回 — 同じ目的なのに呼び方が違うクラスを、並べて扱えずに困っているなら。何が食い違うかを先に整理する
- 第3回 — 古いコードを変えずに新しい呼び方で使いたいなら。包んで変換するクラスを作り、第4回で3つに増やす
- 第5回 — Adapter パターンの名前と構造だけ確かめたいなら。4役と、Facade・Decorator・Proxy との違い
困りごとから探す
Moo のクラスを実際の題材で書いたことがない
- 第1回 — 都市名を渡すと天気を返すクラスを、signatures で書きたい
同じ目的のクラスなのに、呼び方がばらばら
サービスが増えるたびに、呼び出し側が膨らむ
- 第4回 — 引数も戻り値も違う3つ目を足し、配列に入れて1つのループで回したい
やったことに名前を付けて、ほかでも使いたい
- 第5回 — 橋渡しクラスを GoF の Adapter パターンとして整理し、似たパターンと比べたい
全話一覧
- 第1回 天気を返すだけのクラスでも、先に形を決めておく。Perlで都市名から天気を返すクラスを作る【Moo】
- 第2回 天気APIをもう1つ足したら、メソッド名も戻り値も違って同じループで回せない【インターフェースの不一致】
- 第3回 古いAPIのコードには手を入れたくない。包んで同じメソッド名で呼べるようにする【委譲とラッピング】
- 第4回 3つ目は都市コードで英語の天気を返す。橋渡しを足して、3サービスを1つのループで回す【多態性】
- 第5回 作ってきた橋渡しクラスには名前があった。GoFのAdapterパターンとして整理する【Adapter】
