[解決済み] Undoエンジンのデザインパターン
2022-08-07 19:28:34
質問
土木工学のアプリケーションのために、構造物モデリングツールを書いています。建物全体を表す巨大なモデル クラスがあり、ノード、線要素、荷重などのコレクションが含まれていますが、これらもカスタム クラスです。
私はすでに、モデルへの各変更の後にディープコピーを保存するアンドゥエンジンをコーディングしています。今、私は別の方法でコーディングすることができたかどうか考え始めました。ディープコピーを保存する代わりに、対応するリバースモディファイアを持つ各モディファイアアクションのリストを保存することができました。そうすれば、元に戻すために現在のモデルに逆修正を適用したり、やり直すために修正したりすることができます。
オブジェクトのプロパティを変更するなどの単純なコマンドを実行する方法は想像できます。しかし、複雑なコマンドはどうでしょうか。たとえば、モデルに新しいノード オブジェクトを挿入し、新しいノードへの参照を保持するいくつかのライン オブジェクトを追加するようなものです。
どのようにそれを実装するのでしょうか?
どのように解決するのですか?
私が見てきたほとんどの例では、このように コマンド-パターン を使用しています。取り消すことができるすべてのユーザーアクションは、アクションを実行し、それをロールバックするためのすべての情報を持つ独自のコマンドインスタンスを取得します。そして、実行されたすべてのコマンドのリストを維持し、それらを一つずつロールバックすることができます。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] まだプッシュされていない Git マージを元に戻す
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み] Gitで1つのファイルの作業コピーの変更を元に戻す?
-
[解決済み] git commitの代わりに行った "git commit --amend "を元に戻すには?
-
[解決済み] git undo すべての未コミットまたは未保存の変更を取り消す
-
[解決済み] Vimでやり直し(undoアンドゥ)をするにはどうしたらいいですか?
-
[解決済み】C++ シングルトンデザインパターン
-
[解決済み】リレーショナルデータベースデザインパターン?[クローズド]
-
[解決済み] クロスカットの懸念事項の例
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】クラスの命名 - すべてを"<WhatEver>Manager "と呼ぶのを避けるには?[クローズド]
-
[解決済み】ラッパークラスとは何ですか?
-
[解決済み】インターフェイスを作成するタイミングはどのように判断するのでしょうか?
-
[解決済み] コード内のスイッチをなくす方法【非公開
-
[解決済み] Facade、Proxy、Adapter、Decoratorのデザインパターンの違い?
-
[解決済み] クロスカットの懸念事項の例
-
[解決済み] Observerデザインパターンと "Listeners "の比較
-
[解決済み] BridgeパターンとAdapterパターンの違い
-
[解決済み] リポジトリとサービスの違い?
-
[解決済み] ソーシャルネットワークにアクティビティストリームを実装する方法