4

Java プログラムのさまざまなパラメータ設定を管理する方法について、具体的なアイデアを探しています。この質問が少し曖昧であることは承知していますが、コードをより保守しやすくするために、全体像についていくつかのアイデアが必要です。

私のプロジェクトで行うことは、データ (主にテキスト) に対して多くの処理ステップを実行することです。これらの処理ステップは、さまざまな複雑さのアルゴリズムであり、多くの場合多くの設定があります。また、構成ファイルなどで使用される処理ステップを変更したいと思います。

私のプログラムの目的は、反復可能な実験を行うことです。このため、コードのさまざまな部分で使用されるすべてのパラメーターの完全なビューを、できれば適切な形式で取得できる必要があります。

この (プロトタイプ) 段階では、次のようなソース コードの設定があります。

public static final param1=0.35;

また、何らかの処理ステップを担当する各クラスには、独自のハードコーディングされた設定があります。物事を変更したり、何が行われ、どのパラメータ/設定で行われたのかを確認する簡単な方法がないため、実際には非常に恐ろしい.

私の考えは、すべての設定のダンプもサポートする、すべての設定の中央キー/値ストアを持つことです。例:

k:"classA_parameter1",v:"0.35"
k:"classC_parameter5",v:"false"

ただし、パラメーターを文字列として格納するだけではなく、実際の Java クラスまたはオブジェクトに関連付けたいと思います。

すべてを管理するシングルトン「SettingsManager」を持っている方が賢明ですか?または、メインがアクセスできる各クラスに SettingsManager オブジェクトを配置するには? 設定の文字列の説明を保存するのはあまり好きではありませんが、他の方法はわかりません (1 つの設定が使用される SAXparser 実装であり、別のパラメーターが倍精度、たとえばパーセンテージであるとしましょう)。それらをオブジェクトとしてキャストします。

関連する設計パターンに関する経験とページへのリンクは大歓迎です。

明確にするために、私の実験は、ファイル/データベースのデータを処理する一連のアルゴリズムと見なすことができます。これらのアルゴリズムは、プロセス全体でのタスクに応じて異なるクラスにグループ化されます。

Experiment //main
   InternetLookup //class that controls e.g. web scraping
      ThreadedWebScraper 
      LanguageDetection //from "text analysis" package
   Statistics    //Calculate and store statistics
      DatabaseAccess
   DecisionMaking //using the data that we have processed earlier, make decisions (machine learning)
      BuildModel
      Evaluate

最下位レベルの各クラスにはパラメーターがあり、それぞれ異なりますが、進行中のすべてのビューを取得したいと考えています。

4

4 に答える 4

8

最も単純なものから始めて、次のオプションがあります。

  1. プロパティファイル_
  2. Apache コモンズの構成
  3. 春のフレームワーク

後者では、XML 構成ファイルから任意の Java オブジェクトを作成できますが、これはライブラリではなくフレームワークであることに注意してください。これは、アプリケーション全体の設計に影響を与えることを意味します (制御の反転パターンを促進します)。

于 2012-09-27T07:09:07.987 に答える
3

この車輪はすでに何度も発明されています。

最も基本的な java.util.Properties から、値の挿入や型変換などの高度な機能を提供する Spring などのより高度なフレームワークまで。

自分でビルドするのは、おそらく最悪の方法です。

于 2012-09-27T07:13:18.440 に答える
3

質問に対する完全な回答ではないかもしれませんが、考慮すべき点がいくつかあります。

値を文字列として格納する (そして、SettingsManager を介して文字列を他の型に解析する) のが通常の方法です。構成値が複雑すぎてこれを実行できない場合は、実際には構成値ではなく、実装の一部である可能性があります。

SettingsManager オブジェクト全体を単に渡すのではなく、コンストラクター引数を介して各クラスに必要な個々の構成値を注入することを検討してください ( Demeter の法則を参照) 。

可能であれば、Singleton SettingsManager の作成は避けてください。Singleton はさまざまな方法でテスト容易性を損ない、アプリケーションの設計に損害を与えます。

于 2012-09-27T07:15:07.597 に答える