PLoP2008のプログラムからJames Noble関係を読む

PLoP 2008 - 15th Conference on Pattern Languages of Programs より

James Noble氏*1が著者に連ねてるのは以下の二つ:

前者はAspectJアスペクトに関する部分で例外が絡むときのバグパターン(つかまらない例外を出してしまったり、例外を捕まえようとして捕まえられなかったり、それの逆だったり)のカタログ5つ。

後者は、アップデートとクエリがあるオブジェクトで、クエリをキャッシュして最適化するパターン2つ。

  • Restrected Query Optimisation
    • 特定のクエリ(たとえば生きてるオブジェクトだけ列挙する、など)をメソッドにして、アップデート時などで特定のフィールドにクエリ条件が合う結果をコレクションへキャッシュとしてためていき、クエリメソッドではそのキャッシュを返すだけにするパターン
  • Generalized Query Optimisation
    • 前者をより一般化し、クエリメソッドを、関数オブジェクトを受け取るfilterメソッドにして、その関数がキーで結果コレクションを値にしたにハッシュでキャッシュするパターン


Pythonで書いてみようと思って少し書いてみたけど、アップデート時にキャッシュ更新は厳しい気がする。とりあえずキャッシュクリアしたのが以下のコードだけど、パターンが適用できそうなのはlist関係くらいかなあ: