在多步骤、多层流程中处理故障的常用编程技术是什么?



我正在开发一个简单的电子商务网站。当用户进行购买时,它会触发几个同步的级联事件。一些数据被写入我们的数据库,信用卡供应商可以(或不可以)购买,更多的数据被写入到我们的数据库中,然后发送一封电子邮件。

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步失败了。我正在努力了解基本情况,比如更谨慎的做法是创建数据的"预购买"快照,然后在出现故障时回滚所有内容,或者创建一个"假购买"对象并假设一切正常,然后将其复制到实际数据库中。

欢迎提出任何建议。在这件事上,我太不称职了。

干杯!

我建议在插入时数据库信息是原子正确的。这与适当的规范化非常直接。

因此,例如,如果客户输入了他的地址,那么该地址将保存到数据库中——即使客户未能下订单,该地址仍然有效。

同样,如果客户下了一个订单——即使信用卡交易失败,这也是有效的——这在其他地方将是一个单独的事实。(在说允许运输步骤之前,将检查这一事实)

电子邮件步骤可能会根据可用的事实更改其消息,但如果电子邮件服务器关闭,则您不想回滚购买。

所以我的建议是:很好地规范化,并在发生时保留所有信息,然后在过程中的关键步骤进行适当的检查。-不要后退。

最新更新