プラグイン
原文: https://www.martinfowler.com/eaaCatalog/plugin.html
by David Rice and Matt Foemmel
コンパイル時ではなく、設定時にクラスをリンクする
解説の全文は『PofEAA』 499 ページを参照。
複数のランタイム環境でアプリケーションコードを動作させ、それぞれの環境において特定の振る舞いの実装が異なる場合、Separated Interface(476)を利用することが多い。開発者はファクトリメソッドを用意して、正しい実装を提供することになる。 ここでは、Separated Interfaceを使ってプライマリキージェネレータを定義することを想定してみよう。ユニットテスト用には簡単なインメモリカウンタを、製品ではデータベース管理のシーケンスを使えるようにするためだ。あなたのファクトリメソッドには、おそらく条件文が含まれることになるだろう。 条件文では、ローカル環境変数を見て、システムがテストモードかどうかを判断して、正しいキージェネレータを返す。だが、ファクトリの数が増えていくと、面倒なことになる。デプロイ設定が新しくなれば(たとえば「ユニットテストはトランザクション制御なしのインメモリデータベースで実行する」や「製品モードはフルトランザクション制御ありのDB2データベースで実行する」に変更する場合)、複数のファクトリの条件文を編集して、再ビルドして、再デプロイする必要があるからだ。設定をアプリケーション全体に分散させたくはない。再ビルドや再デプロイも避けたい。pluginは集中管理されたランタイム設定を提供することで、この両方の問題を解決する。
(translated by money@andore.com)