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.

Foi útil?

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 .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top