1. ホーム
  2. design-patterns

[解決済み] Undoエンジンのデザインパターン

2022-08-07 19:28:34

質問

土木工学のアプリケーションのために、構造物モデリングツールを書いています。建物全体を表す巨大なモデル クラスがあり、ノード、線要素、荷重などのコレクションが含まれていますが、これらもカスタム クラスです。

私はすでに、モデルへの各変更の後にディープコピーを保存するアンドゥエンジンをコーディングしています。今、私は別の方法でコーディングすることができたかどうか考え始めました。ディープコピーを保存する代わりに、対応するリバースモディファイアを持つ各モディファイアアクションのリストを保存することができました。そうすれば、元に戻すために現在のモデルに逆修正を適用したり、やり直すために修正したりすることができます。

オブジェクトのプロパティを変更するなどの単純なコマンドを実行する方法は想像できます。しかし、複雑なコマンドはどうでしょうか。たとえば、モデルに新しいノード オブジェクトを挿入し、新しいノードへの参照を保持するいくつかのライン オブジェクトを追加するようなものです。

どのようにそれを実装するのでしょうか?

どのように解決するのですか?

私が見てきたほとんどの例では、このように コマンド-パターン を使用しています。取り消すことができるすべてのユーザーアクションは、アクションを実行し、それをロールバックするためのすべての情報を持つ独自のコマンドインスタンスを取得します。そして、実行されたすべてのコマンドのリストを維持し、それらを一つずつロールバックすることができます。