我正在做一个简单的电子商务网站。当用户进行购买时,它会触发两个同步的级联事件。一些数据被写入我们的数据库,购买的信用卡供应商同意(或不),一些更多的数据是我们的数据库,然后发送一封电子邮件。
Step 1. Initial Purchase info recorded on local database
Step 2. Purchase API called on Credit Card vendor
Step 3. Details of transaction written to local database
Step 4. Email receipt/alert sent当其中一个步骤失败时,是否有经过验证的方法可供处理?例如,如果我们已经写入数据库,但是信用卡交易失败。或者我们已经完成了步骤1和2,但是步骤3失败了。我在试着理解基础知识--比如创建一个“购买前的数据快照”,然后在失败的情况下回滚所有数据,或者创建一个“假购买”对象并假设一切正常,然后将其复制到实际的数据库中,这是不是更谨慎。
欢迎提出任何建议。在这件事上,我远远超出了我的能力范围。
干杯!
发布于 2013-07-10 21:50:45
我建议数据库信息在插入时是原子上正确的。通过适当的标准化,这是非常直接的。
因此,例如,如果客户输入了他的地址,那么它将被保存到数据库中-即使客户未能下订单,它仍然有效。
同样,如果客户下了订单-即使信用卡交易失败,也是有效的-这将是另一个单独的事实。(这一事实将在允许发货步骤之前进行检查)
电子邮件步骤可能会根据可用的事实更改其消息,但如果电子邮件服务器关闭,您不会想要回滚购买。
因此,我的建议是:很好地标准化,并保留所有发生的信息,然后在流程的关键步骤中进行适当的检查。-请勿回滚。
https://stackoverflow.com/questions/17572180
复制相似问题