偽装サーバーに届く侵入イベントを可視化するハニーポット侵入レーダーを作ります。まずは侵入イベントを受け取ってコンソールに表示するシンプルな構成から始めましょう。Perl v5.36とMooを使って、イベント記録の基本を実装します。
呪われた高解像度アートを覗き見するギャラリーを作りながら、Proxyパターンの5つのバリエーション(Virtual、Protection、Caching、Logging、Remote)を学ぶシリーズの目次です。
ギャラリーの画像を外部アーカイブサーバーに移動することになった。Remote Proxyでネットワーク越しのアクセスを透過的に扱い、呼び出し側のコードを変更せずに対応します。
ギャラリーへのアクセスに監査要件が追加された。誰がいつどの絵を見たかを記録するLogging Proxyで、監査ログを一箇所に集約する方法を学びます。
高解像度の呪いの絵を何度も見ていると、毎回ロードに時間がかかる…Caching Proxyで結果をキャッシュし、2回目以降の表示を瞬時に行う方法を学びます。
鍵付きの呪いの絵が追加されたギャラリー。直アクセスでは危険なため、Protection Proxyで権限チェックを挟み、許可されたユーザーだけが閲覧できるようにします。
高解像度の呪われたアート画像を全件読み込んでアプリがフリーズ…Virtual Proxyで遅延初期化を実装し、必要なときだけ画像をロードする方法を学びます。
PerlとMooを使ってAPIレスポンスシミュレーターを作りながら、Factory Methodパターンを学ぶシリーズの目次です。全8回で、if/elseの肥大化問題を解決する設計パターンを体験できます。
シリーズ最終回。これまで作ってきた設計がFactory Methodパターンであることを明かし、GoFの定義と照らし合わせて理解を深めます。
新しいシナリオ「レート制限」を追加します。既存のコードを一切修正せず、新しいクラスを追加するだけで機能拡張できることを体験しましょう。これがオープン・クローズドの原則です。
送信処理やログ出力など、全シナリオで共通する処理を基底クラスに集約します。これにより、コードの重複を減らし、一貫性のある動作を保証できます。
Factory Methodパターンの核心となる「生成処理のオーバーライド」を実装します。各シナリオクラスがそれぞれ専用のResponseを生成する仕組みを詳しく見ていきましょう。
Moo::Roleを使ってレスポンスクラスに共通のインターフェースを定義します。renderメソッドを必須にすることで、レスポンスの一貫性を保証しましょう。
if/elseの肥大化を解決するため、シナリオごとにクラスを分けます。継承を使って、成功シナリオと失敗シナリオをそれぞれ専用のクラスとして定義しましょう。
APIシミュレーターにエラーレスポンスを追加しようとすると、if/elseの条件分岐が急激に増えて管理が難しくなります。この問題を体験しながら、設計改善の必要性を理解しましょう。