Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 用于拆分合并的撤消/重做软件模式_Design Patterns - Fatal编程技术网

Design patterns 用于拆分合并的撤消/重做软件模式

Design patterns 用于拆分合并的撤消/重做软件模式,design-patterns,Design Patterns,我有一个有点复杂的基因组学软件,允许撤销和重做操作。如果我有一个元素A,我可以把它移动到A0,A1,A2,A3,等等,然后把它移动到它历史上的任何一点。这很容易 我想弄明白的是拆分和合并的概念。如果我有A0和B0和,我可以把它们合并成A1,很容易地来回移动。然而,如果我回到A0/B0并决定做一些其他的事情,而不是在任何一个组件上进行合并,那么就记录历史而言,事情开始变得模糊起来。我的直觉是,一旦我改变A0或B0,我就会抛弃我的合并历史 我的具体问题是: 1-用户会期望什么(git范式、googl

我有一个有点复杂的基因组学软件,允许撤销和重做操作。如果我有一个元素A,我可以把它移动到A0,A1,A2,A3,等等,然后把它移动到它历史上的任何一点。这很容易

我想弄明白的是拆分和合并的概念。如果我有A0和B0和,我可以把它们合并成A1,很容易地来回移动。然而,如果我回到A0/B0并决定做一些其他的事情,而不是在任何一个组件上进行合并,那么就记录历史而言,事情开始变得模糊起来。我的直觉是,一旦我改变A0或B0,我就会抛弃我的合并历史

我的具体问题是: 1-用户会期望什么(git范式、google文档范式等)? 2-是否有任何共同的范例来处理这个更复杂的范例(我认为Momento或Command模式不能很好地处理这些情况[拆分/合并]? 3-是否有一种更简单/不太复杂的方法来处理这些模式,可能“足够好”呢

任何想法都会有帮助


谢谢。

如果不进一步了解您的软件在做什么,很难回答这个问题,因此我会尽量做到概括性

1-用户会期望什么(git范式、google文档范式等)?

谁是你的用户?你提到这是基因组学软件。你的用户有生物学背景还是软件背景。根据我的经验,生物学家通常与软件开发人员有不同的期望

在你开始走上错误的道路之前,你应该问你的用户他们期望什么。我们不能回答这个问题,只有他们能回答。与用户的频繁沟通和良好的需求收集是交付成功软件的关键

2-是否有任何共同的范例来处理这个更复杂的范例(我认为Momento或Command模式不能很好地处理这些情况[拆分/合并])

同样,在不确切知道要拆分或合并什么的情况下,我无法给出明确的答案,但是
命令
模式能够执行非常复杂的任务。毫无疑问,undo/merge命令必须与redo/split命令完全相反。。您可能还希望查看
状态
模式或
状态
命令
的组合,其中每个状态创建不同的命令

3-是否有一种更简单/不太复杂的方法来处理这些可能“足够好”的模式?


Memento
可能足够好,或者可能是某种序列化。将每个版本保存到一个临时文件中,并从这些临时文件中恢复撤消/重做操作可能会更简单。

如果不了解您的软件正在执行的操作,则很难回答此问题,因此我将尽量做到概括性

1-用户会期望什么(git范式、google文档范式等)?

谁是你的用户?你提到这是基因组学软件。你的用户有生物学背景还是软件背景。根据我的经验,生物学家通常与软件开发人员有不同的期望

在你开始走上错误的道路之前,你应该问你的用户他们期望什么。我们不能回答这个问题,只有他们能回答。与用户的频繁沟通和良好的需求收集是交付成功软件的关键

2-是否有任何共同的范例来处理这个更复杂的范例(我认为Momento或Command模式不能很好地处理这些情况[拆分/合并])

同样,在不确切知道要拆分或合并什么的情况下,我无法给出明确的答案,但是
命令
模式能够执行非常复杂的任务。毫无疑问,undo/merge命令必须与redo/split命令完全相反。。您可能还希望查看
状态
模式或
状态
命令
的组合,其中每个状态创建不同的命令

3-是否有一种更简单/不太复杂的方法来处理这些可能“足够好”的模式?


Memento
可能足够好,或者可能是某种序列化。将每个版本保存到一个临时文件中,并从这些临时文件中恢复撤消/重做操作可能会更简单。

如果不了解您的软件正在执行的操作,则很难回答此问题,因此我将尽量做到概括性

1-用户会期望什么(git范式、google文档范式等)?

谁是你的用户?你提到这是基因组学软件。你的用户有生物学背景还是软件背景。根据我的经验,生物学家通常与软件开发人员有不同的期望

在你开始走上错误的道路之前,你应该问你的用户他们期望什么。我们不能回答这个问题,只有他们能回答。与用户的频繁沟通和良好的需求收集是交付成功软件的关键

2-是否有任何共同的范例来处理这个更复杂的范例(我认为Momento或Command模式不能很好地处理这些情况[拆分/合并])

同样,在不确切知道要拆分或合并什么的情况下,我无法给出明确的答案,但是
命令
模式能够执行非常复杂的任务。毫无疑问,undo/merge命令必须与redo/split命令完全相反。。您可能还希望查看
状态
模式或
状态
命令
的组合,其中每个状态创建不同的命令

3-是否有一种更简单/不太复杂的方法来处理这些可能“足够好”的模式?