0

私はいくつかのアドバイスを得たいと思う小さな設計上の問題があります:

同じ基本クラスから継承するいくつかのクラスがあり、それぞれが同じデータを受け入れ、わずかに異なる方法で分析できます。

Analyzer
     |
     ˪_ AnalyzerA
     |
     ˪_ AnalyzerB
     ...

呼び出すアナライザーとそのパラメーターを定義する入力ファイルがあります (ファイルの形式を制御することはできません)。さらに、同じ方法でデータ抽出器を定義し、他の同様のものも定義します (同様に、これはいくつかのバリエーションを持つことができるアクションであることを意味します)。

ファイル内のさまざまなアナライザーを反復処理し、正しいアナライザーを構築するファクトリを呼び出すモジュールがあります。入力ファイルが定義できるアーキタイプごとにファクトリがあり、これまでのところ良好です。

しかし、それを拡張して新しいタイプのアナライザーを追加したい場合はどうすればよいでしょうか?

私が考えていた解決策は、ファクトリ名にちなんで名付けられた各ファクトリのプロパティ ファイルを使用することです。これは、入力ファイルの実行したいものの定義と、実行に使用する実際のクラスとの間のマッピングを保持します。アクション。

このようにして、実行時にそのクラスをロードできます->正しいインターフェイスを実装していることを確認してから実行します。

John Doe が独自のアナライザーを作成したい場合は、正しいファイルに新しいプロパティを追加するだけで済みます (この種のプロパティのカスタマイズを可能にする最善の戦略が何であるかはよくわかりません)。

要するに:

  1. 私のソリューションはあまりにも欠陥がありますか?
  2. いいえの場合、プロパティのカスタマイズを許可する最もユーザーフレンドリー/便利な方法は何ですか?

PS

  1. 残念ながら、私は既存のソリューションとしてビルドイン JDK クラスのみを使用することに限定されているため、それらに SF をドロップすることはできません。
  2. この質問が的外れでないことを願っています。私は翼をこのように切り取ることに慣れていないだけで、エレガントなソリューションを実装するのに役立つSFやその他のものを持っていません。
4

1 に答える 1

0

java.sql.DriverManager.getConnection(connectionString)メソッドの実装方法を見てください。最善の方法は、ソース コードを確認することです。

アイデアの非常に大まかな要約 (多くのプライベート メソッド内に隠されています)。ドライバーのリンクされたリストはありませんが、これは多かれ少なかれ一連の責任の実装です。

  1. DriverManager は、ドライバーのリストを管理します。
  2. 各ドライバーは、そのメソッド registerDriver() を呼び出して、DriverManager に自身を登録する必要があります。
  3. 接続が要求されると、getConnection(connectionString) メソッドは、接続文字列を渡してドライバを順番に呼び出します。
  4. 各ドライバーは、指定された接続文字列がその能力の範囲内にあるかどうかを認識しています。はいの場合、接続を作成して返します。それ以外の場合、制御は次のドライバーに渡されます。

類推:

  • ドライバー = 具体的なアナライザー
  • 接続文字列 = 分析するファイルの種類

利点:

  1. アナライザーを対象のファイルの種類に明示的にバインドする必要はありません。ファイルを分析できるかどうかは、アナライザーに任せてください。そうでない場合は、null (または例外など) が返され、AnalyzerManager に行の次のアナライザーに問い合わせる必要があることが通知されます。
  2. 新しいアナライザーの追加は、register() メソッドへの新しい呼び出しを追加することを意味します。完全なデカップリング。
于 2013-11-17T16:13:43.673 に答える