trong dự án tôi hiện đang làm việc, chúng tôi có ba loại giá khác nhau tùy thuộc vào độ tuổi của người dùng (người lớn, trẻ em, v.v ...). Vì vậy, chúng tôi đã có trên DB một bảng trông như thế này:
PRICES type Amount A 20 B 15 C .. D ..
Lúc đầu, chúng tôi chỉ có 4 loại giá khác nhau, vì vậy trong mã, chúng tôi có một cái gì đó như thế này:
Map<String, BigDecimal> prices = new HashMap<String, BigDecimal>();
Trường hợp các phím là loại giá.
Gần đây, họ đã thêm một quy tắc kinh doanh mới có thêm 3 loại phụ cho mọi loại giá, vì vậy bây giờ chúng tôi có một cái gì đó như thế này:
PRICES type subtype Amount A 1 20 A 2 15 A 3 .. B 1 .. B 2 .. ... .. ..
Bạn nghĩ lựa chọn nào trong hai lựa chọn sau là tốt hơn và tại sao?
Bản đồ lồng nhau
Map<String, Map<String, BigDecimal>> prices;
Trong đó các khóa là loại giá và loại phụ:
prices.get(type).get(subtype);
Phím kết hợp
Bản đồ giống với bản gốc:
Map<String, BigDecimal> prices;
Và nối các khóa để lập chỉ mục giá khác nhau:
prices.get(type+"_"+subtype);
class PriceKey{ PriceType type; PriceSubtype subtype; }
chìa khóa. Điều này sau đó có thể dễ dàng được mở rộng hơn nữa