no projeto em que estou trabalhando, tivemos três tipos diferentes de preços, dependendo da idade do usuário (adulto, criança, etc.). Então, tivemos no banco de dados uma tabela parecida com esta:
PRICES type Amount A 20 B 15 C .. D ..
No começo, tínhamos apenas quatro tipos diferentes de preços; portanto, no código, tínhamos algo parecido com isto:
Map<String, BigDecimal> prices = new HashMap<String, BigDecimal>();
Onde as chaves eram o tipo de preço.
Recentemente, eles adicionaram uma nova regra de negócios que adiciona três subtipos a cada tipo de preço; agora, temos algo parecido com isto:
PRICES type subtype Amount A 1 20 A 2 15 A 3 .. B 1 .. B 2 .. ... .. ..
Qual das duas opções a seguir você acha que é melhor e por quê?
Mapas aninhados
Map<String, Map<String, BigDecimal>> prices;
onde as chaves são o tipo e subtipo de preço:
prices.get(type).get(subtype);
Chaves combinadas
O mesmo mapa que originalmente:
Map<String, BigDecimal> prices;
E concatene as chaves para indexar os diferentes preços:
prices.get(type+"_"+subtype);
class PriceKey{ PriceType type; PriceSubtype subtype; }
chave. Este pode então ser facilmente prorrogado