@nqounetです。
前回は、コードリファレンスを使って処理そのものを変数に入れる方法を学びました。
今回は、処理をハンドラークラスに分ける方法を学びます。
処理をクラスに切り出す
前回のコードでは、処理を無名サブルーチンとして書いていました。
| |
シンプルな処理ならこれで十分ですが、実際のWebアプリケーションでは各機能がもっと複雑になります。データベースへのアクセス、バリデーション、テンプレートの描画など、様々な処理が必要です。
そこで、各機能を専用のクラスに切り出します。このようなクラスをハンドラークラスと呼びます。
flowchart LR
BBS[BBS] --> LH[ListHandler]
BBS --> FH[FormHandler]
BBS --> TH[ThreadHandler]
LH --> R1[投稿一覧]
FH --> R2[フォーム]
TH --> R3[スレッド]
ListHandler クラスの作成
まず、投稿一覧を表示するListHandlerクラスを作ります。
| |
処理を担当するrunメソッドを定義しました。クラスなので、後から属性を追加してデータベース接続などを持たせることもできます。
FormHandler クラスの作成
同じパターンで、フォーム表示用のFormHandlerクラスも作ります。
| |
どちらのクラスもrunという同じ名前のメソッドを持っています。これにより、呼び出す側は「どのハンドラーか」を意識せずにrunを呼べます。
これが責任の分離です。BBSクラスは「どの処理を選ぶか」だけを担当し、「処理の中身」は各ハンドラークラスに任せます。
まとめ
- 処理を専用クラス(ハンドラークラス)に切り出す
- 各ハンドラーは共通の
runメソッドを持つ - 責任を分離することでコードが整理される
- 機能追加や修正がしやすくなる
次回予告
次回は、各ハンドラークラスに「必ずrunメソッドを持つ」という約束をMoo::Roleで定義します。共通のルールを作って、より堅牢な設計にしていきましょう。
