问题
I'm writing a desktop application to do vector drawing in C++, and considering using sqlite to back my undo/redo feature.
Has anybody used sqlite for undo/redo features? How does it work out for you?
Clarification:
I was aware of the stack approach, I have even implemented one application with that approach. The problem I encountered was that it becomes hard to maintain after a while.
What I meant by utilizing sqlite is that I will map my entire in-memory data structure into a sqlite database, and let the sqlite do the diff and revision for me. Speed should not be a issue if I create a in-memory database.
That was the idea and I was wondering if that could work.
回答1:
It makes sense to use SQLite to back undo/redo when an SQLite database is the application's data file format. See the SQLite website for an explanation of how to do this with SQLite triggers.
回答2:
Basically a undo/redo feature can be implemented using a stack: when the user does an operation, you push on the stack an object that represents the delta between the state before and after the operation, and when you undo, you "unroll" the delta. Because every operation the user does creates a new delta object on the stack, it might by that sqlite is not your choice of technology because it might be too slow. I would recommend considering the possibility of just storing the undo/redo information in memory, and linearizing it on the disk only if you want to actually save the undo/redo history.
回答3:
Take a look at Memento Design Pattern.
来源:https://stackoverflow.com/questions/700863/how-to-utilize-sqlite-for-undo-redo-features