簡體   English   中英

使用playframework實現購物車的建議

[英]advice on implementing a shopping cart using playframework

我正在學習使用playframework編寫代碼來實現一個用於銷售items的webstore 。我已經使用crudsecure modules實現了Admin區域。現在,我想創建一個用戶可以添加項目並繼續結帳的shopping cart

我對電子商務的了解很少,但我已經閱讀了一些教科書,這些教科書使用servlets實現購物車和一些網上商店功能。在書中,購物車用於保存一Set CartItem ,每個都包含一個Product實例和quantity 。之后,用戶將商品加入購物車,購物車被保存在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<CartItem> 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<CartItem> items = cart.getCartItems();
  processOrder(items,userinfo);
  cart.clearItems();
} else {
  // maybe show expired session warning?
}

也可以在成功調用processOrder(...)后從緩存中刪除cart對象。

Cache.delete(session.getId());

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM