2

そこで、Java でAccumulo用のさまざまなインデックス作成および取り込みクラスを構築しています。

しかし、私の問題は直接関係ありません。

キーワードとデータベース テーブル名の長いリスト (2 ダースほどあり、さらに増え続けているとしましょう) を格納するプロパティ ファイルがあります。

現在、メイン クラスがインスタンス化されると、これらすべてのプロパティを関連する String オブジェクトに読み込み、全体で使用します。ただし、これらのアイテムの一部は、場合によっては大きなチャンクで、他のクラスに継承する必要があります。

私のオプションは

  1. 間違った順序でトークンを送信すると、あらゆる種類の不快感が発生する可能性があるため、これは悪いことのように思えます。
  2. プロパティ オブジェクト自体を渡し、各クラスが独自の文字列オブジェクトのインスタンス化を処理できるようにします (トークンがファイルに追加またはファイルから削除された場合、将来維持するのが面倒になる可能性があります)。
  3. 特別なクラス オブジェクトとして読み込まれる JSON ファイルに情報を格納する方法に移行します。このファイルは、そこから情報を取得する必要がある人に渡されます (小さな欠点は、各クラスが必要に応じてテーブル名からテーブル参照を作成するため、 JSON を使用する場合、先に進んですべてのテーブル参照をインスタンス化して、クラスが参照を要求できるようにすることはある程度理にかなっているかもしれませんが、必要のないときにいくつかの余分な参照が頻繁に作成されます。)
  4. その他のオプション Java の専門家は、私が知らないことを知っています

過去に私は主に組み込みおよび小規模システムの C++ 開発者だったので、これについて心配しています。これは私の最初の大規模なプロジェクトの 1 つであり、最初からやり遂げようとしています。足を濡らすためだけに、デザインパターンを含む本をすでに山ほど持っていますが、一般的なプログラミング実践の知識ベースについては、喜んで提案を受け付けます。

他の人が利益を得ることができるように、これを一般化しようとしましたが、さらに詳細が必要になる場合があります。

4

3 に答える 3

0

複雑さのレベルでは、java.util.Properties ファイルを直接処理する必要があります。

これは単純なオブジェクトであり、必要に応じてスケーリングする必要があります。マッピング ファイルを継続的に変更することになるため、プロパティを Java オブジェクトにマップすることはお勧めしません。java.util.Map だけが提供できる完全な柔軟性が必要です。

ところで、あなたがこれを必要とするという事実は、正しく聞こえません。おそらく、アプリケーションで再考する必要があるグローバルな設計上の問題があります。

また、階層ツリーでプロパティを構造化すると構成ファイルの複雑さを抑えるのに役立つ可能性があるため、json ソリューションは適切な場合がありますが、モデルは頻繁に変更される可能性があるため、json オブジェクトを Java オブジェクトにマッピングすることは避けます。 (私が理解する限りでは)。

構成プロパティ間の「パターン」を見つけて、いくつかの組織を抽出しようとする場合があります。構成に組み込まれたいくつかの適切な「ビジネス オブジェクト」を推測したら、構成をそれらのオブジェクトの配列に減らすことができます。

JSON は私に適しているように思えます。あなたの問題は、「複雑な構成」のプロトタイプと見なすことができますが、これは珍しいことではありません (maven の pom.xml について考えてください)。したがって、私の意見では2つのことが必要です。

  1. 構成内の組織を抽出します
  2. 構造化された構成形式 (JSON や XML など) を使用する
于 2013-01-27T15:41:18.710 に答える
0

Commons Configurationには、整理に役立ついくつかの機能があります

  • ソースから独立した構成データ (プロパティー・ファイル、XML ファイル、データベースなど)
  • 階層プロパティ
  • Bean の宣言と作成
于 2013-03-05T16:24:46.883 に答える
0

オプション(2)は良いアプローチのようです。

これのバリエーションは、おそらく要素名のプレフィックスに基づいて、メインの Properties オブジェクトからすべての文字列を個別の Properties (または HashMap) オブジェクトに抽出することです。したがって、 classFooは名前の前に が付いたすべてのプロパティを取得しfoo.、 classBarはすべてのbar.xxxプロパティを取得します。

これにより、プロパティが論理的 (および物理的) に個別のコレクションに保持され、特定のクラスに必要なプロパティのみが提供されます。すべてのクラスが共通のプロパティを共有する必要がある場合 (all.またはglobal.接頭辞が付いているか、接頭辞がまったくないクラスなど)、それらのプロパティをそれぞれの個別の Properties オブジェクトに追加できます。

于 2012-10-17T23:45:14.073 に答える