Moo::Role で IntrusionObserver を作り、requires 'update' で必須メソッドを宣言します。update を持たない BrokenObserver を作って、契約違反が実行前に見つかる様子を確かめます。
RadarLogObserver と ThreatScoreObserver を作り、ログ表示とスコア計算を別々のクラスに切り出します。どちらも update メソッドで侵入イベントを受け取る形にそろえ、単一責任の原則に沿って整理します。
ハニーポットの侵入ログ表示に、脅威スコア計算とアラートを足していくと、1つのループに処理が積み重なります。通知先を足すたびにコードを書き換える問題を、実際のコードで確かめます。
偽装サーバーに届く侵入イベントを、タイムスタンプ・送信元IP・攻撃タイプを持つ IntrusionEvent クラスで表し、ループで受け取ってコンソールに表示します。シリーズの出発点となる最小構成です。
Perl と Moo で、呪われた高解像度アートのギャラリーを作りながら、画面が固まる・誰でも見られる・毎回待たされる・履歴が残らない・外部へ移すという5つの困りごとを、代理オブジェクト(Proxy)で順に片付ける全5回の連載の目次です。困りごとからも選べます。
ストレージ逼迫で画像を外部アーカイブへ移すことになった。HTTP 通信を呼び出し側に書かず、代理オブジェクトの裏に隠して既存コードをそのまま動かします(Remote Proxy)。
閲覧履歴を残す要件が出ると、ログ出力があちこちのクラスに散らばる。誰がいつどの絵を見たかの記録を、代理オブジェクト 1 か所にまとめます(Logging Proxy)。
お気に入りの絵を何度開いても、そのたびに 0.5 秒のロードが走る。取得済みの結果を代理オブジェクトに保持させ、2 回目以降を瞬時に表示します(Caching Proxy)。
画像クラスに権限チェックを直接書くと、本来の仕事と混ざって膨らむ。鍵付きの絵を管理者と VIP 会員だけに見せる確認を、代理オブジェクトへ切り出します(Protection Proxy)。
呪われた高解像度アートを全部読み込んだ時点で、ギャラリーが固まる。画像を見るときまで読み込みを遅らせる代理オブジェクトを Perl と Moo で作ります(Virtual Proxy)。
Perl と Moo で、フロントエンド検証用の偽APIレスポンスシミュレーターを作り、シナリオが増えるたびに伸びる if/else を、継承・Moo::Role・オーバーライドで片付けて、最後に Factory Method パターンと名前を付ける全8回の連載の目次です。どこから読むか、困りごとからも選べます。
シリーズの最終回。ここまで作った Scenario 基底クラスとサブクラスの構造を、GoF の Factory Method パターンの Creator・Product・ファクトリメソッドに対応づけ、メリットと使いどころを整理します。
RateLimitResponse と RateLimitScenario を追加して、429 Too Many Requests を返せるようにします。既存のクラスと基底クラスには手を入れず、if/else も増やさずに機能を拡張できることを、オープン・クローズドの原則に沿って確かめます。
ログ出力・処理時間の計測・タイムスタンプの追加を、Scenario 基底クラスの execute に集めます。サブクラスは create_response だけを実装すれば済み、共通処理の変更が1か所で終わることを、実行ログで確かめます。
基底クラスの create_response をサブクラスで上書きし、SuccessResponse と ErrorResponse をシナリオごとに作らせます。呼び出す側は変えずに、生成するオブジェクトだけを差し替える仕組みを実際に動かして確かめます。