You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于WPF + CommunityToolkit.Mvvm实现自定义Undo/Redo命令的最优方案

图形编辑器Undo/Redo实现方案对比与选择

方案1:基于ICommand/RelayCommand,主ViewModel维护命令栈

  • 优势:实现门槛低,逻辑直接。不需要额外架构层,ViewModel直接管理命令的执行、入栈出栈,适合快速落地小型项目。
  • 劣势:命令栈与ViewModel强耦合,ViewModel职责过载(既要管画布逻辑,又要管Undo/Redo栈)。后续如果要加多画布、多编辑会话,或者在其他模块复用Undo/Redo能力,几乎要重构整个逻辑。

方案2:独立会话仓库+服务化实现

  • 优势:职责分离清晰——会话仓库专门存命令栈,服务层封装Register/Execute/Undo等核心逻辑,ViewModel只需要调用服务接口即可。这种架构天然支持多会话(比如多画布各自的编辑历史),也能轻松扩展历史记录持久化、跨模块复用Undo/Redo能力,长期维护成本低。
  • 劣势:初期需要搭建仓库和服务的基础架构,比方案1多写一些代码,但这些成本在项目迭代中会快速回本。

选择建议

如果你的编辑器是小体量、需求单一(单画布,无后续扩展计划),方案1足够用;如果考虑长期迭代、需要扩展复杂功能,方案2是更稳妥的选择,能避免后期因架构限制被迫重构的麻烦。

内容的提问来源于stack exchange,提问作者Alexey Rodionov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 23:20:55