http://dp2.me/blog/?p=657
http://zhidao.baidu.com/question/584572507.html
从OOP的角度,购物车里面每一个元素都是一个LineItem对象,每一种商品有自身的unique id。
购物车本身提供addToCart、removeFromCart、changeQuantity之类的操作,用一个map来管理这些元素,application可以方便地遍历/查看其内容。购物车需要提供物品价格总计,然后视情况提供tax & shipping estimation。
从分布式e-commerce网站的角度:
每一个对象的各种属性(价格、availability、图像、描述……)应该是从多个不同的service取来,比如价格和availability就是从仓储管理系统,图像和描述就是从别的什么media service取得。这样一来降低latency,二来拆分数据、服务,可以增加availability。
当操作购物车的时候,js进行ajax call。后台要考虑两种情况:
一种是guest cart,这种我们无法通过服务器来sync,于是我们必须要在用户本地储存cookie。这样当用户login的时候,我们要提供guest cart的merge功能。
另一种是customer cart。这时候我们要在后台保存user的选择。同时就产生了consistency的问题。因为我们的模型一般是eventually consistent,所以可能会出现多个不同版本的cart。这时候,如果我们能够通过该cart的vector clock来辨识哪个在先哪个在后,我们就取后面的cart;如果我们不能,则简单merge两个cart,这样至少不会丢失物品。另外customer cart也可以考虑生成cookie。
购物车要注意安全性。两个用户共享一台计算机的时候,其中一个不应该以任何方式能看到另一个的购物车。
cart在某些point需要检测其中物品是否已经变得unavailable 。这种情况,将其移除购物车,加入wishlist(这可能是另一个service),然后通知customer。
作为在顾客checkout的关键路径上的一个玩意,cart必须要有monitor。这个monitor包括两个方面:
一、cart本身的健康状态,如果addToCart的动作过少,或者经常出现fatal/exception,必须马上page operations.
二、abandoned cart。也就是说顾客checkout到某个步骤的时候不玩了。这个也可以是checkout application来report。这个数据对于卖家分析用户行为是至关重要的。
http://zhidao.baidu.com/question/584572507.html