使用playframework实现购物车的建议

我正在学习使用playframework编写代码来实现一个webstore来销售items.I已经使用crudsecure模块实现了Admin区域。现在,我想创建一个shopping cart ,用户可以添加项目并继续结账。

我对电子商务的了解很少,但我已经阅读了一些教科书,这些教科书使用servlets实现购物车和一些网店function。在书中,购物车用于保存一Set CartItem ,每个包含Product的实例和用户将商品添加到购物车后,购物车存储在user session

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

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

 shopcart.add(mycartItem); Cache.set(session.getId(), shopcart); .. 

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

 ShopCart cart = Cache.get(session.getId(),ShopCart.class); Set items = cart.getCartItems(); processOrder(items,userinfo); ... cart.clearItems(); 

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

错误。 对不起是如此苛刻,但你正在做的事可能会失败。

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

你为什么不能使用缓存? 因为缓存是易变的,并且可以在没有先前警告的情况下移除其中的元素。 这意味着在任何时候您的缓存都可能返回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; } 

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

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

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

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

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

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

也可以在成功调用processOrder(…)后从缓存中删除cart对象。

 Cache.delete(session.getId()); 

希望这可以帮助。