質問

私のアプリケーションでは、ユーザーに小さな元に戻す機能を提供したいと思います。ユーザーが元に戻すことができる以上のアクションはありません。特にアクションは次のとおりです。

  • オブジェクトにメモを追加します
  • オブジェクトを色付けします
  • 文字列でobjcetにタグを付けます

今、私はこれを実装する方法について考えました。最初に、ユーザーが取ることができる3つの異なるアクションの抽象的な基本クラスであるアクションクラスを考えました。ユーザーがこれらのアクションを引き受けるたびに、この抽象アクションクラスのサブクラスの新しい適切なインスタンスが作成され、すべてのアクションを含むリストに挿入されます。

ユーザーが何かを元に戻したいときはいつでも、リストがユーザーに表示され、元に戻すアクションを選択できます。

今、私はそのようなアクションオブジェクトに何を保存する必要があるかを考えていました:

  • アクション前のオブジェクトの状態
  • 取得された実際のアクション(たとえば、オブジェクトのメモに追加された文字列)

これで十分かどうかはわかりません。また、時系列の注文のようなものについても考えましたが、リストを年代順に維持できるため、これが必要なはずです。

他に考慮すべきことはありますか?

役に立ちましたか?

解決

元に戻す/redoは一般に実装されます コマンドパターン. 。 Action クラスはこれの基礎として使用できますが、各コマンド内で「do」アクションと「元に戻す」アクションが必要です。 これが例です 実際にはこれの。おそらく、実行されたコマンドをスタックに保存する必要があります。これにより、実装がはるかに簡単になり、ユーザーがフォローするのがはるかに簡単になります。

他のヒント

あなたはこのような単純なことをすることができます:

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 既存のプロジェクトに機能性を元に戻す/やり直すとき。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top