5

C++ でベクター描画を行うデスクトップ アプリケーションを作成しており、元に戻す/やり直し機能をサポートするために sqlite を使用することを検討しています。

元に戻す/やり直し機能に sqlite を使用した人はいますか? それはあなたにとってどのようにうまくいきますか?

説明:

私はスタック アプローチを認識していました。そのアプローチで 1 つのアプリケーションを実装したことさえあります。私が遭遇した問題は、しばらくすると維持が難しくなるということでした。

sqlite を利用するということは、メモリ内のデータ構造全体を sqlite データベースにマップし、sqlite に差分とリビジョンを任せることを意味します。インメモリ データベースを作成する場合、速度は問題になりません。

それがアイデアであり、それが機能するかどうか疑問に思っていました。

4

4 に答える 4

12

SQLiteデータベースがアプリケーションのデータファイル形式である場合、SQLiteを使用して元に戻す/やり直しを元に戻すことは理にかなっています。SQLiteトリガーを使用してこれを行う方法の説明については、SQLiteWebサイトを参照してください。

于 2009-03-31T22:23:58.830 に答える
2

基本的に、元に戻す/やり直し機能はスタックを使用して実装できます。ユーザーが操作を行うとき、操作の前後の状態の間のデルタを表すオブジェクトをスタックにプッシュし、元に戻すときは、オブジェクトを「展開」します。デルタ。ユーザーが実行するすべての操作でスタック上に新しいデルタ オブジェクトが作成されるため、sqlite は遅すぎる可能性があるため、テクノロジとして選択できない可能性があります。元に戻す/やり直しの履歴を実際に保存したい場合にのみ、元に戻す/やり直し情報をメモリに保存し、ディスク上で線形化する可能性を検討することをお勧めします。

于 2009-03-31T13:15:14.670 に答える
0

Mementoデザインパターンを見てください。

于 2009-03-31T13:35:55.307 に答える