Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.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

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
Javascript 纪念品还是命令模式?_Javascript_Design Patterns_Mvvm_Command Pattern_Memento - Fatal编程技术网

Javascript 纪念品还是命令模式?

Javascript 纪念品还是命令模式?,javascript,design-patterns,mvvm,command-pattern,memento,Javascript,Design Patterns,Mvvm,Command Pattern,Memento,我有一个JavaScript web应用程序(我的模型的主干,我的视图的ReactJS),它有两种“显示模式”,用户可以使用按钮在这两种模式之间切换。这些模式通过在层次结构中重新排列叶对象、在树中同一“级别”的容器之间移动多个对象来渲染来自我的模型(这是一个树结构,实现了复合模式)的数据(想象一下一个抽屉里有一盒袜子,在同一个抽屉里的盒子之间随机移动多个袜子)。这通常需要对数据进行完全的重新排列。目前我使用Memento模式处理这个问题,序列化并保存当前模型,直到用户在恢复时再次切换显示模式 同

我有一个JavaScript web应用程序(我的模型的主干,我的视图的ReactJS),它有两种“显示模式”,用户可以使用按钮在这两种模式之间切换。这些模式通过在层次结构中重新排列叶对象、在树中同一“级别”的容器之间移动多个对象来渲染来自我的模型(这是一个树结构,实现了复合模式)的数据(想象一下一个抽屉里有一盒袜子,在同一个抽屉里的盒子之间随机移动多个袜子)。这通常需要对数据进行完全的重新排列。目前我使用Memento模式处理这个问题,序列化并保存当前模型,直到用户在恢复时再次切换显示模式

同时,我还想允许用户按照通常意义上的“编辑”顺序进行操作——对对象进行任意的、可重复的更改,改变对象的大小、颜色、形状等。因此,这是一种标准的撤消-重做模式。我还没有为此编写任何代码,但我想知道应该如何具体实现该模式关于Memento方法,我已经准备好在显示模式之间切换。这是完全不同的,还是我可以/应该将两者结合起来

有一种情况可能表明后者是这样的:用户可能会进行编辑,他们希望保存该编辑,而在显示模式下,该模式将切换回以前存储的模式,该模式现在将包含过时的数据。这建议一起管理显示模式更改和编辑序列,并根据用户命令考虑它们,ra超过应用程序状态(大概是根据命令模式对此进行建模)。大概在这种模式下,我会有一组用于显示模式的“成对”命令,它们不使用Memento之类的序列化模式,而是知道如何以适当的方式构造基础数据,并在这些表示之间来回切换(虽然从表面上看,这似乎比我目前基于纪念物的模式更复杂,因为我会——回到我的“抽屉”类比——记录每只袜子之前都是哪个盒子)。这是正确的方法吗?我的推理正确吗

N.B:我的模型非常小,通常不超过几Kb,即使有用户交互,也不会增长太多。因此,Memento模式不会花费我任何费用。这只是在实现它的地方继续使用它是否正确

编辑

我遇到的另一种可能性是通过一种方法处理显示模式。因此,与我使用memento方法时每次交换实际模型不同,viewmodel位于模型和视图之间,并以适合当前显示模式的适当方式“重新构造”模型数据。因此,会出现默认的“模式”,它只是将模型呈现为“原样”,但另一种模式是使用中间视图模型重构数据层次结构。在我看来,这种方法的主要缺点是,它在应用程序体系结构中引入了另一个可变层,这可能太脆弱而难以管理。基于memento的方法ch当然要简单得多。

相关?相关?