Procurando uma luz.
Tenho a seguinte situação, um sistema de chamados, cada chamado pode ter várias ações e cada ação pode ter suas particularidades, até aí tranquilo. Na hora de finalizar um chamado, tenho de percorrer todas as ações e seus desdobramentos para ver se existe alguma inconformidade de acordo com a lógica de negócio e devo fechando cada desdobramento, e ação associados. Contudo nesse processo eu posso achar uma inconformidade e ter de cancelar tudo.
Esse é o problema, eu teria duas abordagens, uma eu avalio todas as ações e desdobramentos para ver se posso finalizar, se não tiver nenhuma inconformidade, percorro tudo novamente fechando tudo e fecho o chamado, caso contrário não.
Outra possibilidade, seria de alguma forma implementar um rollback, a medida que vou validando, vou finalizando e se achar alguma inconformidade desfaço o que foi finalizado.
Eu gostaria de entender se tem uma forma decente de implementar essa segunda abordagem. Eu pensei em implementar commands, e agrupá-los numa transação, mas não vi como armazenar o estado anterior de cada command. nem como fazer no caso dos command atualizarem mais de um objeto.
Qualquer idéia é bem vinda.