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