原文: http://www.martinfowler.com/eaaCatalog/plugin.html

by David Rice and Matt Foemmel

コンパイル時ではなく、設定時にクラスをリンクする

解説の全文は『PofEAA』 499 ページを参照。

アプリケーションコードがそれぞれで求められる特定の振る舞いについて実装が異なる複数のランタイム環境で動く場合、Separated Interface(476)が利用されることがある。多くの開発者はファクトリメソッドを書くことにより正しい実装を提供する。 ユニットテスト用に簡単なインメモリカウンタだが、製品ではデータベース管理のシーケンスが使えるようにプライマリキージェネレータをSeparated Interfaceを使って定義することを想定しよう。ファクトリメソッドにはおそらく条件文が含まれていてそこではローカル環境変数を見てシステムがテストモードで動いているかどうかを判断して正しいキージェネレータを返す。ひとたび2,3のファクトリがあると、手にメスを握っているのだ。新しいデプロイ設定を確立するには、”トランザクション制御なしのインメモリデータベースに対しユニットテストを実行してください”とか”DB2データベースに対しフルトランザクション制御ありで製品モードの試験を実行してください”といって、いっぱいあるファクトリの条件文を編集して、再ビルドして再配備する必要がある。コンフィグレーションをアプリケーション全体に分散させてはだめだし、再ビルド、再配備を求めてもいけない。pluginはランタイムコンフィグレーションを集中管理することでこの両方の問題を解決する。

(translated by money@andore.com)


PofEAA index | パターンカタログの日本語版 | パターンカタログの英日対応表