问一个问题,不知道谁做过业务操作级别的回滚!那个能提供一下思路么?
例如我买一个东西,结果对方在交易成功之后发现自己交易错了,然后想取消这次操作,请请问大致的思路是什么??
ps:一次操作 会涉及n张表的改动!
交易成功之后发现交易错了,交易的事务已经完成,已经不存在事务了。这个时候,你只能采取逆向业务操作,比如线上退款啊,什么的,提供一个业务功能给用户来提交此类申请,再设计一个逆向退款的业务,就可以了。
1.TransactionScope用这个包住你的操作
2.用unit of work模式
可以看看蒋叶湖的博客有相关内容
我可能没有说清楚!我说了 是执行成功了。这个操作是成功的,但是在业务上可能是手误的原因要取消这个操作。
@小眼睛老鼠: 难道不可以直接删除数据?
@IT屌丝: 你觉得呢?和钱有关的!
@小眼睛老鼠: 打个比喻 你执行了一次交易
有几张表加了几条记录
然后有一张关键表 更新了数据 (这里特指钱)
但是发现交易成功后 很久 客户才发现这次交易错误了
然后要撤销这次操作
那么这个时候怎么撤销??
@小眼睛老鼠: 可以通过数据库日志进行回滚
这个你可以在手误或者有其他原因的情况跑出异常,然后在异常的地方处理。
只能反向将所有相关表的记录标识为无效了。这个已经不算是事务了。
结果对方在交易成功之后发现自己交易错了?
这种都交易过了,还回滚?事务难道能持久解决?
那你还不如做成12306那种退票的、订票成功,记录该用户订票价格等信息、也付款了,就类似于你的交易成功、但是我发现我订的票时间来不及,那我直接退票、这个时候重启一个交易将原来的价格退换给用户账号、
这个已经不算是事务了。这算是网站的一种功能。买东西,然后后悔了,然后取消订单。要写专门的退单流程吧。
专门做回滚记录了,可以用XML做记录或其它 单独一个业务流程了
悔棋
一个流程好多步,每一步必须都要完成才行.
数据库的ACID
擦,一堆技术流。这和事务无关,和业务有关。数据表设计时,一个状态字段加备注字段。说明情况。关系到钱的问题的时候,也不能直接删或者回滚什么的,做一条类似财务上冲红的操作,就是加一条数字为负的对应记录,总体求和的时候,能持平就行了。总之这个问题是个关键的业务问题。只要保证历史操作记录保持原样可查,取消原因可查,取消动作可查,最后最重要的是关于钱的最后总和是能持平的。
晕,这跟事务有什么关系?
事务不是用来处理这个问题的,流程都走完了,必须走别一个撤销流程,而不是让之前的流程失败
做一个撤消功能