私が現在取り組んでいるプロジェクトでは、ユーザーの年齢(大人、子供など)に応じて3つの異なるタイプの価格がありました。したがって、DBには次のようなテーブルがありました。
PRICES type Amount A 20 B 15 C .. D ..
最初は4種類の価格しかなかったので、コードには次のようなものがありました。
Map<String, BigDecimal> prices = new HashMap<String, BigDecimal>();
キーは価格タイプでした。
最近、彼らはすべての価格タイプに3つのサブタイプを追加する新しいビジネスルールを追加したので、次のようになります。
PRICES type subtype Amount A 1 20 A 2 15 A 3 .. B 1 .. B 2 .. ... .. ..
次の2つのオプションのどちらが良いと思いますか、そしてその理由は?
ネストされたマップ
Map<String, Map<String, BigDecimal>> prices;
ここで、キーは価格タイプとサブタイプです。
prices.get(type).get(subtype);
結合キー
最初と同じマップ:
Map<String, BigDecimal> prices;
キーを連結して、さまざまな価格にインデックスを付けます。
prices.get(type+"_"+subtype);
class PriceKey{ PriceType type; PriceSubtype subtype; }
鍵を持つことを検討してください。これは簡単にさらに拡張できます