元に戻す機能を実装する方法は?
-
09-10-2019 - |
質問
私のアプリケーションでは、ユーザーに小さな元に戻す機能を提供したいと思います。ユーザーが元に戻すことができる以上のアクションはありません。特にアクションは次のとおりです。
- オブジェクトにメモを追加します
- オブジェクトを色付けします
- 文字列でobjcetにタグを付けます
今、私はこれを実装する方法について考えました。最初に、ユーザーが取ることができる3つの異なるアクションの抽象的な基本クラスであるアクションクラスを考えました。ユーザーがこれらのアクションを引き受けるたびに、この抽象アクションクラスのサブクラスの新しい適切なインスタンスが作成され、すべてのアクションを含むリストに挿入されます。
ユーザーが何かを元に戻したいときはいつでも、リストがユーザーに表示され、元に戻すアクションを選択できます。
今、私はそのようなアクションオブジェクトに何を保存する必要があるかを考えていました:
- アクション前のオブジェクトの状態
- 取得された実際のアクション(たとえば、オブジェクトのメモに追加された文字列)
これで十分かどうかはわかりません。また、時系列の注文のようなものについても考えましたが、リストを年代順に維持できるため、これが必要なはずです。
他に考慮すべきことはありますか?
他のヒント
あなたはこのような単純なことをすることができます:
Stack<Action> undoStack = new Stack<Action>();
void ChangeColor(Color color)
{
var original = this.Object.Color;
undoStack.Push(() => this.Object.Color = original);
this.Object.Color = color;
}
実装する必要があります コマンドパターン すべてのアクションについて、あなたは元に戻したいです:
すべて正しいようですが、リストよりもスタックを使用したいです。時系列の順序付けの側面に役立ちます。
正確かつ実証済みのインプレメンテーションを元に戻すための機能性はコマンドパターンです
これを見落とすのは難しいです Simple-Undo-redo-library-for-csharp-net 既存のプロジェクトに機能性を元に戻す/やり直すとき。
所属していません StackOverflow