Trong phát triển ứng dụng web, một trong những chức năng quan trọng là giỏ hàng. Có nhiều cách để lưu trữ giỏ hàng, và lựa chọn phương pháp phù hợp phụ thuộc vào cách vận hành ứng dụng của bạn. Dưới đây, chúng ta sẽ xem xét hai giải pháp phổ biến nhất: lưu giỏ hàng vào session, hoặc lưu trực tiếp vào database. Ngoài ra, các lựa chọn khác như cookies hoặc local storage… cũng sẽ được đề cập để bạn cân nhắc.
- Lưu giỏ hàng bằng ArrayList và hashMap
Một cách đơn giản và phổ biến để quản lý giỏ hàng là sử dụng ArrayList và HashMap. ArrayList cho phép lưu danh sách các sản phẩm, trong khi HashMap giúp quản lý thông tin sản phẩm với các cặp khóa/giá trị (ví dụ: ID sản phẩm và thông tin chi tiết sản phẩm) giúp cho việc quản lý giỏ hàng tối ưu hơn.
Cụ thể, cấu trúc của giỏ hàng có thể được thiết kế như sau:
- ArrayList lưu danh sách sản phẩm.
- HashMap lưu chi tiết sản phẩm với cặp khóa là productId và giá trị là product.
- Lưu trữ giỏ hàng với Session hoặc Cookies
Có nhiều lựa chọn để lưu trữ giỏ hàng trong Java Servlet, một trong số đó là lưu vào session. Session là không gian lưu trữ tạm thời trên server, giúp giữ lại thông tin giỏ hàng trong một khoảng thời gian nhất định (ví dụ 1 giờ), cho phép người dùng tiếp tục mua sắm mà không mất dữ liệu.
Ngoài ra, bạn có thể sử dụng cookies hoặc local storage (nếu ứng dụng là SPA – Single Page Application). Cookies và local storage lưu dữ liệu trên trình duyệt của người dùng, phù hợp với những giỏ hàng không quá lớn và chỉ yêu cầu lưu trữ tạm thời.
- Lưu giỏ hàng trực tiếp vào Database
Một cách giải quyết bài toán giỏ hàng mạnh mẽ hơn là lưu trực tiếp vào database. Các nền tảng thương mại điện tử lớn như Shopee hay Lazada đều lưu giỏ hàng vào database, đảm bảo dữ liệu được duy trì ngay cả khi người dùng tắt máy hay trình duyệt.
Khi người dùng thêm sản phẩm vào giỏ hàng, thông tin sản phẩm sẽ được lưu vào một bảng cart trong database với các trường như:
- productId (ID của sản phẩm)
- username (người dùng)
- quantity (số lượng sản phẩm)
- total (tổng tiền)
Phương pháp này giúp bảo quản giỏ hàng lâu dài, và đảm bảo tính liên tục khi người dùng quay lại sau đó. Tuy nhiên, việc lưu trữ liên tục vào database có thể tiêu tốn tài nguyên, nhất là với lượng lớn người dùng.
- Phương pháp kết hợp: Lưu tạm vào Session, đẩy vào Database khi thanh toán
Một giải pháp phổ biến khác là kết hợp giữa việc lưu giỏ hàng vào session tạm thời và chỉ đẩy dữ liệu xuống database khi người dùng thanh toán. Điều này giúp giảm tải cho database và tăng hiệu suất. Khi người dùng nhấn “checkout”, tất cả dữ liệu giỏ hàng sẽ được cập nhật vào database.
Phương pháp này phù hợp với các ứng dụng không yêu cầu lưu trữ giỏ hàng lâu dài khi chưa thanh toán, và giúp tối ưu tài nguyên.
Quy trình tổng quát
- Khi người dùng thêm sản phẩm: Lưu tạm vào session.
- Khi người dùng nhấn thanh toán: Dữ liệu từ session sẽ được chuyển xuống database.
Mô hình công nghệ
- Kết luận: Chọn phương pháp phù hợp
Tùy thuộc vào mục tiêu của ứng dụng, bạn có thể lựa chọn phương pháp lưu trữ giỏ hàng khác nhau:
- Session hoặc cookies: Phù hợp với giỏ hàng tạm thời.
- Lưu trực tiếp vào database: Lý tưởng cho các ứng dụng yêu cầu bảo quản lâu dài, giống như các sàn thương mại điện tử lớn.
- Kết hợp session và database: Giải pháp tối ưu giữa hiệu suất và lưu trữ bền vững.
Cuối cùng, lưu giỏ hàng vào database được xem là cách tốt nhất, giúp đảm bảo người dùng không mất giỏ hàng khi trình duyệt bị đóng, dù cho việc quản lý dữ liệu có phức tạp hơn. Trong khi đó, sử dụng session hoặc cookies có thể giúp giảm tải cho hệ thống nếu được triển khai hợp lý.
Giảng viên Lê Anh Tú
Bộ môn Ứng dụng phần mềm
FPT Polytechnic TP HCM