移动端购物车的实现

购物车一个电商平台的核心功能之一。从产品层面对购物车的分析有过很好的一篇文章,http://blog.csdn.net/youshandeyang/article/details/5316568

这个功能看起来很简单,无非就一个页面展示了购物车里的内容;作为电商平台的核心功能之一,购物车功能远非想象中的那么简单。先从产品方面来谈谈。

1,一般会在商品详情页里提供一个加购物车的按钮,这是购物车里内容的来源。但是现在很多应用里商品详情里不再提供直接购买按钮,而是直接都先扔到购物车里。这像极了我们在超市里的购物体验,不管你买多少商品,必须先放购物车了,然后到出口处结账。那么问题就来了,如何进入购物车。

2,进入购物车的按钮一般都放在首页,列表页。。。任何用户可能需要进入购物车进行结账的地方。也就是说,购物车是非常重要的结账通道。如果在没有一键购买的应用中,那么它就成了支付的关键路径。参考多个APP的设计,首先购物车按钮放在了所有商品浏览相关的页面,比方商品列表,电商首页,商品详情。其次,进入购物车的按钮要小,不能影响用户浏览商品啊。最后,按钮又要醒目,常用的房间就是加显眼的角标了。

3,什么时候将商品从购物车里移除。只有当形成订单时,我们才把商品从购物车里移除。

4,关于购物车的数据保存问题。将商品添加到购物车时还不需要用户登录,如果用户登录了,那么购物车内容就要算给该用户;也就是说用户及时登录到了其他手机上,也能看到他的购物车内容。这里就存在一个购物车内容认领的问题,没有登录时的购物车内容只有在当前手机才能看到。一旦用户登录,该用户就相当于认领了购物车内容,全部归属于当前用户。

5,价格的计算问题:加入购物里的商品价格可能随时变化,甚至商品会被下架。我是这么考虑这个问题,商品的价格需要通过类似价格中心去实时获取,也就是说购物车里商品的总结会实时在变。库存在变,加购物车时可能库存充足,你买了10件,但在之后进入购物车开始结账时,可能商品库存不足了,只能动态调整可以购买的商品数量。关于无效的商品,比方已下架或者已删除,库存不足,这样的商品仍然不能直接从购物车里的悄悄删除,而是将该商品标示为已无效状态,让用户自行处理。这里把握的一个通用的原则,类似用户收藏的,关注的帖子等等,这就属于用户的私有数据,不能因为帖子删除了,就将其从用户收藏里悄悄删除,用户必须有个知情权。

6,如何退出购物车,回到商品页面也是非常有讲究。各位产品细细琢磨:)

再来说说开发设计,这里有产品会忽略的点,当然也有产品不会去考虑的点如性能问题:

1,其实我最担心的是,调整购物车里某个商品的购买个数的操作,这个操作的成本很低,用户只要拼命的点+或-按钮就可以调整数量;我们知道如果要将每次操作的结果都更新到服务器端的话,很有可能你上次的更新请求还没响应,你就又按下了+操作。通过抓包分析淘宝里的实现原理,发现你在不断按+按钮时淘宝没有发出更新请求,当你停下不再按+按钮时,淘宝客户端才发出更新请求。可想而知,请求类似这样 setCount。

2,重复商品的合并,思考这样一种情况:如果你购买的一个商品已经在购物车里,你又选择加入了购物车,那么这时你要做的只要将商品数量累计上就可以了。

3,开发了最麻烦的事就是数据保存在多处,如何解决数据之间同步的问题。你会说你们没有用分布式数据库,也没有用数据缓存,哪里来的的数据同步。其实数据同步的问题存在于所有的B/S和C/S系统中。想象一个这样的情况,你打开了一个商品详情页面,一直保持页面打开,就是不操作;这时即时商品被下架了,你这边看到还是显示在页面上。这就是一个数据同步的问题,你打开了页面相当于获取了数据的拷贝,同时数据库里还保存了一份。这时所有APP开发,特别是服务器端开发都需要考虑的问题。希望这个概念能让大家脑洞大开 哈哈。

4,说问题3,是为了引出问题4。如果同一个用户同时登录在两台手机上,都在购物车里对某个商品做+-操作会产生什么反应。体验淘宝APP的结果,操作都是基于对本地数据为基础的推导。比方,当前手机上,商品A库存是10件,那么+操作,相当于会让服务器更新为 setCount 11。而不会管这时其实数据库该用户购车内本商品的个数是多少。

说了这么多,给出个标准答案:

cat.getGoodsList 返回:购物车商品列表

cat.setGoodsCount, 传入参数 goodsId, count,返回:该购物车内商品信息;处理逻辑:如果该商品不存在,则添加该商品;如商品已存在,则将数量设置为传入的count值。

cat.addGoodsWithCound, 传入添加的goodsId,count 返回:该购物车内商品信息;处理逻辑,如果该商品存在,则数量为当前数量+count。如果不存在,则添加该商品,并将数量设置为count。

cat.removeGoods,传入参数

另外,下订单成功后,服务器会查询该用户购物车,删除比对上的商品。

最后对比一下购物车和订单在业务需求上的区别:订单一旦形成,相当于平台和用户之间形成的一个契约,是不能在改变的,尤其是订单总价,送货地址,还有用户 的额外要求(一般作为留言)。且会导致商品减库存。此外防止用户恶意拍下,一般会在拍下后一直不付款的订单进行超时取消订单。相当于用户不履行合同,平台 将合同取消,再归还库存。对于秒杀商品一般15分钟不支付就会取消。购物车不同于订单,算不上是一个契约,仅仅是提供给用户的一个便捷功能。用户完成选品 后,可以一次性付款。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-03 21:10:07

移动端购物车的实现的相关文章

淘宝购物车页面 -- PC端和移动端实战

最近花了半个月的时间,做了一个淘宝购物车页面的demo.当然,为了能够更加深入的学习,不仅仅有PC端的固定宽度的布局,还实现了移动端在media query为768px以下(也就是实现了ipad,iphone 6 plus,iphone6,S5等)的flexbox弹性布局. 还要再说的是,pc端和移动端淘宝购物车页面的bug基本修复完毕,完全适合一个对html,css,css3 ,html5和js有基础,并且熟悉jquery,scss,熟悉json数据交换格式,jquery ajax的人进行学习

python学习笔记——贰之购物车小程序_服务端

服务端大概流程:商家系统 用户可以对商品信息 进行 添加 和 修改,修改包括 删除 和修改功能首先读取文件中的商品信息,转化为列表,然后通过提示 对列表进行操作,最后将列表转成字符串保存到文本当中. 商品信息的文件格式没错就是多个两个逗号,暂时没有好的方法, ['Iphone', 5800],['Mac Pro', 9800],['Bike', 800],['Watch', 10600],['Coffee', 31],('pro', 1899), , #读取商品列表f = open('s1.tx

用jQuery实现移动端手机商城购物车功能实现

购物车数量加减 右加号 1 $(".jiahao").click(function() { 2 var t = $(this).siblings().find("input");//取到数量 3 t.val(parseInt(t.val()) + 1);//parseInt()解析input一个字符串,返回一个整数 4 heji();//调用后面计算的函数 5 }) 左减号 1 $(".jianhao").click(function() { 2

移动端底部基于mui的加入购物车相关的事件

header头部样式文件导入 <link rel="stylesheet" type="text/css" href="css/font-awesome.min.css"/> <link rel="stylesheet" href="css/mui.min.css"> <script src="js/jquery-3.4.1.js" type="t

转:客户端session与服务端session

会话(Session)跟踪是Web程序中常用的技术,用来 跟踪用户的整个会话 .常用的会话跟踪技术是Cookie与Session. Cookie通过在客户端记录信息确定用户身份 , Session通过在服务器端记录信息确定用户身份 . 本章将系统地讲述Cookie与Session机制,并比较说明什么时候不能用Cookie,什么时候不能用Session. 1.1  Cookie机制 在程序中,会话跟踪是很重要的事情.理论上, 一个用户的所有请求操作都应该属于同一个会话 ,而另一个用户的所有请求操作

CSS3及JS简单实现选项卡效果(适配手机端和pc端)

想要适配手机端和pc端,有几种简单的方法,本人使用的是百分比分配的方法. *{ padding: 0; margin: 0; } body,html{ width: 100%; height: 100%; overflow: hidden; } #bottom_box{ width: 100%; height: 50px; background-color: #eee; display: flex; //这是flex布局,父元素设置为flex,子元素设置几等份就是分成几等份 position:

Stunnel服务端

Stunnel on Debian GNU/Linux 6 (squeeze) 传统的POP3, SMTP, Samba等服务,都是不加密的协议(即在网络上明文传输数据),通过stunnel,可以将访问这些服务的连接通过一个加密的管道进行,便于保护个人隐私. 这里我们要搭建的目标: 服务器为Linux(Debian 6.0 squeeze),运行两个服务: Squid HTTP代理服务器,监听8080端口,只接受本机请求: Stunnel运行在服务端模式,监听443端口.并将443端口的请求转发

Ajax改动购物车

1.购物车类的设计 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hpeWVxaWFuZ2xkaA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" > ShoppingCartItem:书的封装,包含书名.数量,价格三个属性,以及相应的getter和setter方法. ShoppingCart:购物车封装类.items为 Map<

JSP之购物车

摘要:用jsp和servlet制作一个简单的购物车 1,首先需要一个用来选择商品的JSP页面 程序如下: 1 <%@ page language="java" import="java.util.*" pageEncoding="GBK" contentType="text/html; charset=GBK"%> 2 <% 3 String path = request.getContextPath();