CQRS(Axon) 撤销功能怎么设计?
目前项目需要设计一个撤销(undo)的功能,传统的java 应用的好像比较简单,主要利用设计模式中的comand命令行模式或者Memento备忘录模式,把需要操作的pojo简单备份一份即可,需要undo时,再从list中取回该备份对象,直接重设回即可。
但是目前我们项目采用的确是CQRS(Axon框架),有多个业务异常复杂的domain需要维护,如果undo的话,不仅需要DTO(数据库层)需要回退(使用command或者Memento模式?),而且需要回退domain中的对象状态。有很多疑问:
1.能否利用CQRS自身的机制实现?比如快照,事件回放之类的。但是这样是否会丢失某些状态?比如我做了A操作,修改了A状态,然后做了B操作,修改了B状态,最后再做了C操作,然后修改了domain中的C状态。现在,我undo B操作,domain回退到了A状态时,是否C状态丢失了?
2.想在domain中添加previousXXX一类的field,每一次状态改变之前,维护一份该状态的上一个版本,但是这样做的缺点显而易见,有太多的状态需要维护,几十个,很繁琐易错
大家有没有什么好的思路,不吝赐教,谢谢
[该贴被tanleihaoren于2012-08-02 10:35修改过]