我必须发送电子邮件,写入文件,并呼叫Web服务.为了保持一致性,必须执行所有步骤.如果任何步骤抛出异常或错误,则必须回滚所有步骤.
在我开始编写自己的对象ACID引擎之前,是否有任何常用的模式在对象级别实现ACID语义?
更好的是,我可以使用任何现有的.NET平台库吗?
编辑:我知道发送电子邮件无法撤消,但无法连接到SMTP服务器导致终止整个事务.此外,我希望这可以扩展用于将来的操作.
几年前我最后一次见到这样的东西.我记得的一点是,它使用命令模式并将每个命令对象存储在队列中.我认为这是一个LIFO堆栈.
因此,如果"事务"失败,引擎将弹出命令对象,撤消命令,然后销毁命令对象.重复直到堆栈为空.如果"交易"成功,则清算堆栈.
不幸的是,我不记得更多.
CSLA.NET实现了类似的撤销堆栈.这是代码的唯一例子,我可以从头脑中思考.