拆分合并的撤消/重做软件模式
undo / redo software pattern for split merge
我有一个有点复杂的基因组学软件,我可以在其中执行撤消和重做操作。如果我有一个元素 A,我可以将它移动到 A0、A1、A2、A3 等,并将它移动到它历史上的任何一点。这很容易。
我想弄清楚的是拆分和合并的概念。如果我有 A0 和 B0 并且,我可以将它们合并到 A1 中并相当容易地来回移动。但是,如果我回到 A0/B0 并决定做其他事情而不是对任何一个组件进行合并,那么就记录历史而言,事情开始变得模糊起来。我的直觉是,一旦我更改了 A0 或 B0,我就会放弃我的合并历史。
我的具体问题是:
1 - 用户期望什么(git 范式,google 文档范式等)?
2 - 是否有任何通用范例来处理这种更复杂的范例(我认为 Momento 或命令模式不能很好地处理这些情况 [split/merge])?
3 - 是否有更简单/更简单的方法来处理可能 "good enough" 的这种模式?
任何想法都会有所帮助。
谢谢。
如果不了解您的软件正在做什么,很难回答这个问题,所以我会尽量笼统。
1 - 用户期望什么(git 范式,google 文档范式等)?
你的用户是谁?你提到这是基因组学软件。您的用户是否具有生物学背景或软件背景。根据我的经验,生物学家通常与软件开发人员有不同的期望。
在你开始走上错误的道路之前,你应该问问你的用户他们的期望是什么。我们无法回答这个问题,只有他们可以。与用户的频繁沟通和良好的需求收集是交付成功软件的关键。
2 - 是否有任何通用范例来处理这种更复杂的范例(我认为 Momento 或命令模式不能很好地处理这些情况 [split/merge])?
同样,在不知道您要拆分或合并什么的情况下,我无法给出明确的答案,但 Command
模式能够执行非常复杂的任务。没有什么说 undo/merge 命令必须与 redo/split 命令完全相反。您可能还想查看 State
模式或 [=11= 的组合] 和 Command
其中每个状态创建不同的命令。
3 - 是否有更简单/更简单的方法来处理可能是 "good enough" 的模式?
Memento
可能足够好或者某种序列化。将每个版本保存到一个临时文件中可能更简单,undo/redo 操作只是从这些临时文件中恢复。
我有一个有点复杂的基因组学软件,我可以在其中执行撤消和重做操作。如果我有一个元素 A,我可以将它移动到 A0、A1、A2、A3 等,并将它移动到它历史上的任何一点。这很容易。
我想弄清楚的是拆分和合并的概念。如果我有 A0 和 B0 并且,我可以将它们合并到 A1 中并相当容易地来回移动。但是,如果我回到 A0/B0 并决定做其他事情而不是对任何一个组件进行合并,那么就记录历史而言,事情开始变得模糊起来。我的直觉是,一旦我更改了 A0 或 B0,我就会放弃我的合并历史。
我的具体问题是: 1 - 用户期望什么(git 范式,google 文档范式等)? 2 - 是否有任何通用范例来处理这种更复杂的范例(我认为 Momento 或命令模式不能很好地处理这些情况 [split/merge])? 3 - 是否有更简单/更简单的方法来处理可能 "good enough" 的这种模式?
任何想法都会有所帮助。
谢谢。
如果不了解您的软件正在做什么,很难回答这个问题,所以我会尽量笼统。
1 - 用户期望什么(git 范式,google 文档范式等)?
你的用户是谁?你提到这是基因组学软件。您的用户是否具有生物学背景或软件背景。根据我的经验,生物学家通常与软件开发人员有不同的期望。
在你开始走上错误的道路之前,你应该问问你的用户他们的期望是什么。我们无法回答这个问题,只有他们可以。与用户的频繁沟通和良好的需求收集是交付成功软件的关键。
2 - 是否有任何通用范例来处理这种更复杂的范例(我认为 Momento 或命令模式不能很好地处理这些情况 [split/merge])?
同样,在不知道您要拆分或合并什么的情况下,我无法给出明确的答案,但 Command
模式能够执行非常复杂的任务。没有什么说 undo/merge 命令必须与 redo/split 命令完全相反。您可能还想查看 State
模式或 [=11= 的组合] 和 Command
其中每个状态创建不同的命令。
3 - 是否有更简单/更简单的方法来处理可能是 "good enough" 的模式?
Memento
可能足够好或者某种序列化。将每个版本保存到一个临时文件中可能更简单,undo/redo 操作只是从这些临时文件中恢复。