另一种方法可能不是在把它放进购物车预留股票。每次页面重新加载时执行一次检查,如果该项目不再可用,则显示一条消息,如“您希望购买的物品刚刚售罄,它很快就会提供”。然后从购物车中移除产品。
现在,你绝对有你开始支付经营权之前保留购物车的内容,然后将其从库存中取出或删除取决于支付的成功/失败的储备。你在一次代码运行中做得更好,这样保留时间会尽可能短。
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