使用playframework实现购物车的建议

时间:2011-08-30 13:34:59

标签: java playframework shopping-cart

我正在学习使用playframework编写代码来实现销售商品的webstore。我使用Admin和{{1}实现了crud区域} modules.Now,我想创建一个secure用户可以添加项目并继续结帐。

我对电子商务的了解很少,但我已经阅读了一些使用shopping cart实现购物车和一些网上商店功能的教科书。在书中,购物车用于保存servlets Set 1}},每个包含CartItemProduct的实例。之后,用户将商品添加到购物车,购物车存储在quantity

因此,只要用户进入购物车详细信息页面,它就会显示所有添加的项目。只有当会话被清除时(由于服务器中定义的会话超时或订单下达时){ {1}}已从user session移除。

我想,我可以在playframework中使用Cache来执行上述操作。将CartItem添加到ShoppingCart实例后。我可以

CartItem

以后,在另一页中,我可以检索购物车及其内容,处理它们并清理购物车。

ShoppingCart

这是正确的方法吗?如果我的想法不正确,请帮我提出建议。

2 个答案:

答案 0 :(得分:13)

错误。抱歉这么严厉,但你正在做的事可能会失败。

游戏无所事事且无国籍。所有相关数据必须存储在数据库中。这意味着您必须在用户添加新项目时保留购物车的数据,并在事务完成后将其删除。

为什么不能使用缓存?因为缓存是易变的,并且可以在没有先前警告的情况下移除其中的元素。这意味着您的缓存可能随时返回null(找不到项),并且您的代码中出现NullPointerException,并且您的用户已经丢失了购物车。

缓存仅用于帮助提高性能,但您不能指望它始终拥有您需要的所有项目。

你应该将你的ShopCart变成一个实体(如果它不是一个实体),并添加如下:

public static ShopCart findCart(String sessionId){
   ShopCart sc = Cache.get(session.getId(),ShopCart.class);
   if(sc == null){
      sc = ShopCart.findCurrentUserCart(); //implement to find the cart of the current user
      Cache.set(sessionId,sc);
   }
   return sc; 
}

然后使用此方法在处理之前检索购物车。

答案 1 :(得分:1)

我对Play没有多少经验!但我认为这很棒。你的想法应该工作得很好。我会为缓存的购物车对象添加超时,如:

Cache.set(session.getId(), shopcart, "30mn");

上面的代码会将购物车缓存30分钟。

请注意,Cache.get可能会返回null,因此您的处理代码应更改为:

ShopCart cart = Cache.get(session.getId(),ShopCart.class);
if (cart != null) { 
  Set<CartItem> items = cart.getCartItems();
  processOrder(items,userinfo);
  cart.clearItems();
} else {
  // maybe show expired session warning?
}

你也应该在成功调用processOrder(...)之后从缓存中删除cart对象。

Cache.delete(session.getId());

希望这有帮助。