Como utilizar sqlite para recursos undo / redo?
Pergunta
Eu estou escrevendo um aplicativo de desktop para fazer desenho vetorial em C ++, e considerando usando sqlite para fazer o meu recurso desfazer / refazer.
Alguém sqlite para recursos undo / redo usado? Como isso funciona para você?
Esclarecimento:
Eu estava ciente da abordagem pilha, Eu mesmo implementado um aplicativo com essa abordagem. O problema que eu encontrei foi que se torna difícil manter depois de um tempo.
O que eu quis dizer, utilizando sqlite é que eu irá mapear toda a minha estrutura de dados na memória em um banco de dados SQLite, e deixar o sqlite fazer o diff e revisão para mim. A velocidade não deve ser um problema se eu criar um banco de dados in-memory.
Essa era a idéia e eu queria saber se isso poderia funcionar.
Solução
Não faz sentido usar SQLite para desfazer back / redo quando um banco de dados SQLite é o formato de arquivo de dados do aplicativo. Consulte o site SQLite para uma explicação de como fazer isso com gatilhos SQLite.
Outras dicas
Basicamente, um recurso de undo / redo pode ser implementado usando uma pilha: quando o usuário faz uma operação, você empurra a pilha de um objeto que representa o delta entre o estado antes e depois da operação, e quando você desfazer, você " desenrolar" o delta. Porque cada operação o usuário faz cria um novo objeto delta na pilha, que poderia por que SQLite não é a sua escolha da tecnologia porque pode ser muito lento. Eu recomendaria considerando a possibilidade de apenas armazenar as informações de undo / redo na memória, e linearização-lo no disco apenas se você quer realmente salvar o histórico undo / redo.
Dê uma olhada Memento Design Pattern .