我已經做了一些研究,以瞭解如何實現這個問題的標題。我正在開發的應用程序已經開發了幾年左右(儘管進展緩慢,你們都知道它是如何在真實世界中)。現在我需要放入撤銷/重做多級功能。現在說「在開始之前你應該考慮過這個問題」有點晚了......呃,我們確實考慮過這個問題 - 而且我們對此沒有采取任何措施,現在就是這樣。從摸索SO(和外部鏈接),我可以看到,這兩個最常見的方法似乎是...在已經功能的應用程序中撤消WPF/C#中的重做
Command模式看起來這將是一個地獄很多工作,我只能想象它會在這個過程中拋出成千上萬的錯誤,所以我並不喜歡那個。
Memento模式實際上很像我在我腦中爲此所做的。我正在考慮是否有辦法快速獲取當前內存中的對象模型的快照,然後我可以將它存儲在某處(也可能存儲在內存中,也可能存儲在文件中)。這似乎是一個好主意,我能看到的唯一問題就是它如何與我們已經寫過的內容整合。您可以看到應用程序,因爲它可以在大面板中繪製圖像(可能有數百個),然後允許用戶通過UI或通過自定義構建的屬性網格來操作它們。整個應用程序與大觀察員模式相關聯。第二件事情發生了變化,事件被解僱了,所有需要更新的事情都發生了。這很好,但我不能幫助你想,如果用戶在屬性網格中輸入文本到texfield,那麼在用戶界面趕上之前會有一點延遲(看起來每次用戶按下一個鍵時都會添加一個新的快照到撤消列表)。所以我對你的問題是......
- 你知道任何可以替代Memento模式,可能工作。
- 您是否認爲Memento模式適合這裏,或者它會讓應用程序的速度變慢。
- 如果Memento模式是要走的路,那麼創建對象模型快照的最有效方法是什麼(我在想連載它或什麼)
- 如果快照存儲在內存中或者是否可能把它們放到文件中?
如果你有這麼多,謝謝你的閱讀。你有任何輸入將是有價值的,非常感謝。
+1當你說撤銷/重做你自動說命令模式。無論簡單還是難以實施。 – 2010-12-02 18:16:03
目前的應用程序完全與觀察員聯繫。讓應用程序創建一個「紀念品」就像編寫函數來創建它,然後訂閱看守人到所需的觀察者一樣簡單。我沒有把心放在紀念品上,但我傾向於它。否則我會很高興地相信。 – DrLazer 2010-12-02 18:28:20