使用playframework实现购物车的建议

Dam*_*ian 8 java shopping-cart playframework

我正在学习使用playframework编写代码来实现webstore销售物品.我已经Admin使用crud和modules实现了该区域secure.现在,我想创建shopping cart一个用户可以添加项目并继续结帐的项目.

我的电子商务的知识是最小的,但我已经通过一些教科书,其实现使用购物车和一些网上商店的功能了servlets.在书籍,使用的车保持SetCartItemS,每一个包含的实例Productquantity.之后,该用户将商品添加到购物车,购物车存储在user session.

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

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

shopcart.add(mycartItem);
Cache.set(session.getId(), shopcart);
..
Run Code Online (Sandbox Code Playgroud)

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

ShopCart cart = Cache.get(session.getId(),ShopCart.class);
Set<CartItem> items = cart.getCartItems();
processOrder(items,userinfo);
...
cart.clearItems();
Run Code Online (Sandbox Code Playgroud)

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

Per*_*ega 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; 
}
Run Code Online (Sandbox Code Playgroud)

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