En el proyecto en el que estoy trabajando actualmente teníamos tres tipos diferentes de precios según la edad del usuario (adulto, niño, etc.). Así que teníamos en la base de datos una tabla con este aspecto:
PRICES type Amount A 20 B 15 C .. D ..
Al principio solo teníamos 4 tipos diferentes de precios, así que en el código, teníamos algo como esto:
Map<String, BigDecimal> prices = new HashMap<String, BigDecimal>();
Donde las claves eran el tipo de precio.
Recientemente, agregaron una nueva regla comercial que agrega 3 subtipos a cada tipo de precio, por lo que ahora tenemos algo como esto:
PRICES type subtype Amount A 1 20 A 2 15 A 3 .. B 1 .. B 2 .. ... .. ..
¿Cuál de las siguientes dos opciones crees que es mejor y por qué?
Mapas anidados
Map<String, Map<String, BigDecimal>> prices;
donde las claves son el tipo de precio y el subtipo:
prices.get(type).get(subtype);
Llaves combinadas
El mismo mapa que originalmente:
Map<String, BigDecimal> prices;
Y concatene las claves para indexar los diferentes precios:
prices.get(type+"_"+subtype);
class PriceKey{ PriceType type; PriceSubtype subtype; }llave. Esto se puede extender fácilmente aún más