[英]advice on implementing a shopping cart using playframework
我正在學習使用playframework
編寫代碼來實現一個用於銷售items的webstore
。我已經使用crud
和secure
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.