电商项目之购物车设计

本文探讨了电商项目中购物车的设计,包括购物车数据的储存策略和实体类设计。推荐采用无论用户是否登录,都存储在Redis中的方案,以SessionID或用户名作为Key。在用户登录时,需要合并Cookie或LocalStorage中的购物车数据到Redis。同时,购物车实体类按sellerId区分,以实现分块展示。最后,介绍了findCartList方法的实现逻辑,涉及添加购物车和合并购物车的操作。
摘要由CSDN通过智能技术生成

购物车

购物车数据的储存

购物车设计是每个电商项目中必不可缺的一环,不管登录与否,购物车都可以使用.那么购物车的数据我们存在哪里呢?
登录时,购物车的数据理所应当的存在redis数据库中,可是未登录时呢?
在这里我们给出了三个方案
1、当用户在未登录的情况下,将此购物车存入Cookie中, 在用户登陆的情况下,将购物车数据存入redis 。如果用户登陆时,Cookie中存在购物车数据,需要将Redis的购物车合并到redis中存储.
缺点:Cookie最大存放:4K;
2、当用户在未登录的情况下,将此购物车存入LocalStorage中, 在用户登陆的情况下,将购物车数据存入redis 。如果用户登陆时,LocalStorage中存在购物车数据,需要将Redis的购物车合并到redis中存储.
缺点:当用户清空浏览器缓存时,LocalStorage数据就没有了;
3、不管用户是否登录,都保存在Redis中;(1)当用户未登录的情况下,获取SessionID,以SessionID作为Redis的Key保存;(2)如果用户登录了,根据用户名来保存到Redis;(3)如果用户登录时,把SessionID中的Redis数据和用户名获取的Redis数据合并;
很明显第三种解决方案是最好的,在这里我们就按照第三种解决方案来设计未登录时的购物车

购物车实体类的设计

作为购物车页面,按照一般电商网站的设计,不同的卖家应该分为不同的区域,也就是说要按照商家的sellerId来分块展示购物车数据.在这里我们已sellerId来区分购物车数据,购物车实体类分为三个属性

    private String sellerId;//商家ID
    private String sellerName;//商家名称
    private List<TbOrderItem> orderItemList;//购物车明细

实现展示购物车数据方法:findCartList:

在商品详情页面的添加购物车追加点击事件,点击则触发添加购物车的方法,登录与否只是存入redis中的key是sessionId还是userId的区别而已

无论是否登录都要先判断cookie中是否有保存的sessionId,以此来判断未登录时是否购物车有数据,如果有在判断是否登录,如果登录则需要合并购物车

根据之前的设计,当用户未登录时我们以sessionId作为key保存购物车数据到redis数据库中,而为了避免sessionId关闭浏览器后丢失,我们采用把sessionId存入cookie中这个方法来保存sessionId.当用户登录后,应该把未登录时的购物车对象集合添加到登录时的购物车集合中,具体逻辑需要遍历未登录时的购物车集合把每个购物车对象依次判断是否在登录的购物车集合中已存在相同的sellerId,如果存在,在判断商品是否相同,如果商品相同,仅仅叠加数量,如果商品不同,则在orderItemList追加一个orderItem对象,如果sellerId都不同,则添加一个新的Cart对象

controller层代码

@RestController
@RequestMapping("/cart")
public class CartController {
   

    @Reference
    private CartService cartService;
    @Autowired
    private HttpSession session;
    @Autowired
    private HttpServletRequest request;
    @Autowired
    private HttpServletResponse response;

    @RequestMapping("/findCartList")
    public List<Cart> findCartList(){
        String userId = SecurityContextHolder.getContext().getAuthentication().getName();
        String sessionId = getSessionId();
        List<Cart> cartList_sessionId = cartService.findCartList
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值