Pree のメタパターン
本読んでないです
ホットスポット・コールドスポット
code:quote
Pree は、デザインパターンを「メタパターン」に抽象化。
よいフレームワークは適切な「ホットスポット」を持つ。
(ホットスポット:可変場所)
フレームワークの実装においては
可変箇所(ホットスポット) =フックメソッド
固定個所(コールドスポット)=テンプレートメソッド
として実装する。
フックメソッドは下の3つのどれかである。
抽象メソッド
正規メソッド = 他のメソッドを呼び出さない実装
テンプレートメソッド
テンプレートとフックの関係は相対的なものとなる。
OOP 的な話は置いておいて、何を固定して何を可変にするかの見極めが大事
ホットスポット側が1つしかなくても固定箇所と可変箇所が分かれているのは有益、理解・修正しやすくなる
よくある Web アプリケーションフレームワークとして考えると
ホットスポット = 利用者の実装、パスのルーティングやリクエストハンドラ
コールドスポット = フレームワーク部分
テンプレートメソッドの呼び出しのように一連の呼び出しをする
サーバー起動時に初期化諸々
リクエスト受けるたびにリクエストオブジェクトを作りリクエストハンドラ(ホットスポットかつフックメソッド)を呼ぶ
全体の流れはコールドスポット側主導になる
アプリケーションの全体の流れはそう変わらない
テンプレートメソッドは一連の呼び出し順序を定義してるのでそうなる
固定箇所をテンプレートメソッドとして実装するとしつつ、可変箇所のフックメソッドの1つにテンプレートメソッドがある
テンプレートとフックの関係は相対的
状況によってテンプレートとみなされたりフックとみなされたりする
他のフックメソッドとしてテンプレートメソッドが呼び出される
再帰的な構造にもなる
リクエストハンドラ(ホット)からフレームワーク(コールド)の機能呼び出す場合もこの構造と言ってよいか
Open-Closed Principle の見極めと近いのでは
7つのメタパターンの図
T = テンプレート / H = フック やね
T から H を呼び出すには T から H を参照できないといけない