2012-03-02 9 views
2

私のアプリケーションは、参照リストがたくさんある非常に典型的なビジネスアプリケーションです。たとえば、ステータス(保留中、進行中、完了済みなど)または国のあるテーブル、またはオプションのリストを持つテーブルがある可能性があります。'参照データ'を扱うためのデザインパターンを探す

現在、この参照データをタイプごとに1つの表(ステータス表、国表など)で表に保管しています。しかし、今は混乱しており、それに対処するためのオーバーヘッドが高すぎます。 (新しい参照テーブルを追加すると、関連するすべてのインフラストラクチャを更新することを意味します)。

は現在、私の解決策は、4つの部分があります。

  • データを格納するテーブルを
  • メモリ内のレコード自体を保持するためのビジネスオブジェクト(これはやり過ぎである)
  • 読書のためのサービスクラスと必要なときに列挙型は、私はどこでもハードコーディング「4」なし「保留」の状態を参照したい場合ので、私は、例えば(メモリ内の特定の参照データ項目を参照することができ、データ
  • を問い合わせる。

関連する質問hereを見回して見つけましたが、それははるかにキャッシュに焦点を当てています。私は、参照データの全体的な処理に焦点を当てたベストプラクティスを探しています。

私の現在のアプローチは不気味だと思っています。私はそれをやり直したいので、作業が簡単です。しかし、私が掘り下げて少し上手くいくものを作成する前に、参考データを管理して作業するためのベストプラクティスを教えてください。

答えて

0

リファレンスデータカテゴリのデザインごとに1つのテーブルがあるため、コンポーネントの数が増えていることがわかりました。

代替次のスキーマを持つ単一のテーブルを持つことです。

タイプ値 「国」USA 「国」カナダ 「ステータス」「READY」 「ステータス」、「保留中」

Set<String> countries; 
Set<Status> status; 
.. 
.. 

あなたは、単一のAPIまたは別のAPを持つことができます:

は、その後、あなたのようなデータ構造にこのスキーマを格納する方法を知っているインテリジェントなクラスを持つことができます以下のような特定のメソッドを持つI:

getCountryList(); 
addCountry(); 

APIは、インテリジェントいずれかの形で、同様に新しいものを追加することで、適切なデータ構造を返すの詳細をカプセル化します。

これらのアイテムが一握りで、複数のコピーを作成せずにメモリ内の既存の単一コピーを再利用したい場合は、FlyWeightパターンを使用することもできます。上記のAPIはFlyWeight(http://en.wikipedia.org/wiki/Flyweight_pattern)になります。これはいくつかの効率の懸念に対処するでしょう。

ちょうどそれに亀裂。

関連する問題