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