另一種方法可能不是在把它放進購物車預留股票。每次頁面重新加載時執行一次檢查,如果該項目不再可用,則顯示一條消息,如「您希望購買的物品剛剛售罄,它很快就會提供」。然後從購物車中移除產品。
現在,你絕對有你開始支付經營權之前保留購物車的內容,然後將其從庫存中取出或刪除取決於支付的成功/失敗的儲備。你在一次代碼運行中做得更好,這樣保留時間會盡可能短。
ProcessOrder()
{
bool reserved = ReserveShoppingCartContents();
if (reserved)
{
bool paymentStatus = ProcessPayment();
if (paymentStatus)
RemoveShoppingCartContentsFromStock();
else
ReleaseShoppingCartReserve();
}
else
{
RefreshShoppingCartContents(); // Remove positions or adjust quantities
MessageBox ("Could not reserve your shopping cart contents. Please check out your selection");
}
}
您的儲備持續時間越短,您的物品實際銷售的機會就越高。你儘量減少衝突的可能性:CustomerA開始的購物車,該項目被保留,CustomerB來臨的時候,看到的項目不上股票和消失,CustomerA決定他不喜歡的價格和取消操作。你有兩個潛在客戶,但不能賣給任何一個。
感謝您的意見。我將重新修改功能。我知道這不是做這件事的最好方法。凍結股票可能不是一個好主意,除非您銷售獨特的產品,例如演唱會門票。 – jgallant 2009-08-31 18:40:41
是的,與源代碼管理和數據庫事務一樣,默認爲樂觀鎖定,除非您有充分的理由不這樣做。 – Jerph 2009-10-26 17:51:20