1

在注册过程中,我使用 Transaction 来包含帐户设置中涉及的所有操作,以便在出现问题时可以回滚。

最后发生的一项是计费过程,如果支付成功,则调用 Commit 操作以完成帐户创建,如果说用户的卡被拒绝,我会回滚。

但是,我想知道最好的方法是将尝试计费的日志写入数据库,而该特定的写入操作不会被保护其他数据库操作的事务“覆盖”。这在 MySQL 中可能吗?有问题的日志表不依赖于任何其他表。由于在我们开始使用交易之前创建的遗留支付库,在回滚操作之后保留应用程序中的数据以将其写入有些困难。如果 MySQL 有解决方案,我想避免这种情况。

4

1 回答 1

2

考虑到这个目标,我不会使用交易。您描述的操作似乎完全有权独立存在。

例如,一张发票有一个抬头和一个或多个行。您使用事务来确保您不会在数据库中存储不完整的发票,因为这将是一个应用程序错误:在业务逻辑中没有任何情况,例如您有没有标题的行。

但是,从业务逻辑的角度来看,拥有一个未经确认的帐户是完全合理的。客户可能更愿意了解情况并能够提供另一种付款方式,而不是重新开始。

此外,在如此漫长的过程中使用事务需要保持与 MySQL 服务器的开放连接。如果您需要实现 HTTP 接口,则必须重新考虑整个逻辑。

简而言之,事务是防止应用程序错误的工具,而不是实现业务逻辑的机制。

于 2013-08-28T11:12:08.563 回答