- 两种方式
- 淘宝类型的购物车
- 京东类型的购物车
- 实现原理
我们的项目是一个仿京东的网上商城。但是在购物车这一块儿是有选择性的,现在市面上的购物车类型主要就是淘宝的算一种,然后京东的算一种。我们项目在选择购物车实现的时候为了更好的优化,体现项目的价值,我们对这一块进行了严谨的分析。
因为购物车要实现的功能就是把用户想要购买的商品信息保留起来,那么对于这种功能主要的区别就是一种是淘宝的必须登陆以后才能使用购物车保存用户的选择的商品信息,有一步用户是否登陆的验,然后将用户选择的商品信息直接放入到持久化数据库中保存下来,然后当用户点击购物车的时候,判断用户登陆后,直接查询购物车中的商品信息,并将信息显示到页面上给用户展示。然而京东的购物车呢相对来说就少了这样的一些判断,直接在用户离线状态就可以使用,提升了用户的体验度。
- 淘宝购物车的实现原理:淘宝的购物车是不能再离线状态使用的,这也是这类购物车的一个特点。这种购物车是直接把商品信息存入到持久化数据库中的,但是也有不太好的一点就是相对于京东的购物车类型来说,就是用户体验度稍差一些。当用户往购物车中添加商品信息时,判断当前用户是否存在,如果用户不存在提示用户登录,如果用户存在,将用户选择的商品信息以及用户信息传递到后台去添加购物车。
B.京东购物车的实现原理:京东购物车相对于淘宝购物车来说添加了离线商品添加功能,但是需要浏览器支持cookie。在实现中,当用户点击将商品添加到购物车中时,判断用户是否登录,如果用户登录直接将商品和用户信息传到后台添加购物车信息。如果用户没有登录,将商品和用户的信息写进浏览器cookie中,当本机用户登录时直接把cookie中的信息同步到持久化数据库中进行保存,同时清空cookie中的商品及用户信息。购物车回显时判断用户是否登录,如果用户没有登录显示本地cookie缓存中的商品信息,如果用户登录直接查询持久化数据库中的商品信息进行购物车回显
我们的购物车在用户没有登陆的情况下,在商品详情界面,点击“加入购物车”把商品id传递给Controller,Controller接收id,Controller调用Service根据商品id查询商品基本信息M 。把商品写入cookie中,加入cookie之前先从cookie中把购物车的商品取出来判断当前购物车商品列表中是否有此商品,如果有数量加一,如果没有添加一个商品,数量为1。展示给用户购物车列表。
此时,点击提交订单按钮,服务器进行拦截,让我们进行强制登陆,登陆成功后,用我们的用户名作为redis中的key,取对应的value,此时的value是我们要在购物车中展示的商品集合。同时从cookie中取我们刚才添加进去的商品。遍历这个集合,把集合中的元素id和cookie的商品id进行比较,若相同,数量+1,若没有相同的,则作为新商品融合进从redis中取出来的value中,融合完毕后,再把这一对key-value重新存入redis中,因为前后两次的key相同,所以会对原来的value进行覆盖,同时,将cookie中的数据清除。然后再展示到购物车列表。
2.如果先进行登陆,在登陆的同时,根据用户名取redis中的value,同时取cookie中的数据, 如果有的话,进行上述的操作:比较id,相同的加数量,没有相同的,则作为新商品融合进从redis中取出来的value中,融合完毕后,再把这一对key-value重新存入redis中,因为前后两次的key相同,所以会对原来的value进行覆盖,同时,将cookie中的数据清除。此时,
在商品详情界面,点击“加入购物车”把商品id传递给Controller,Controller接收id,Controller调用Service根据商品id查询商品基本信息。把商品写入redis中,加入redis之前先从redis中用户名这个key把购物车的商品取出来判断当前购物车商品列表中是否有此商品,如果有数量加一,如果没有添加一个商品,数量为1。展示给用户购物车列表。
`