In dem Projekt, an dem ich gerade arbeite, hatten wir drei verschiedene Arten von Preisen, abhängig vom Alter des Benutzers (Erwachsener, Kind usw.). Wir hatten also in der DB einen Tisch, der so aussah:
PRICES type Amount A 20 B 15 C .. D ..
Anfangs hatten wir nur 4 verschiedene Arten von Preisen, also hatten wir im Code so etwas:
Map<String, BigDecimal> prices = new HashMap<String, BigDecimal>();
Wo die Schlüssel waren die Preisart.
Kürzlich haben sie eine neue Geschäftsregel hinzugefügt, die jedem Preistyp drei Untertypen hinzufügt. Jetzt haben wir so etwas:
PRICES type subtype Amount A 1 20 A 2 15 A 3 .. B 1 .. B 2 .. ... .. ..
Welche der beiden folgenden Optionen ist Ihrer Meinung nach besser und warum?
Verschachtelte Karten
Map<String, Map<String, BigDecimal>> prices;
Dabei sind die Schlüssel der Preistyp und der Subtyp:
prices.get(type).get(subtype);
Kombinierte Schlüssel
Dieselbe Karte wie ursprünglich:
Map<String, BigDecimal> prices;
Und verketten Sie die Schlüssel, um die verschiedenen Preise zu indizieren:
prices.get(type+"_"+subtype);
class PriceKey{ PriceType type; PriceSubtype subtype; }
Schlüssel. Dies kann dann leicht weiter verlängert werden