1

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

同时,我还希望允许用户进行通常意义上的“编辑”序列——对对象进行任意、可重做的更改,改变它们的大小、颜色、形状等。所以它是标准的撤消重做模式。我还没有为此编写任何代码,但我想知道我应该如何针对我已经用于在显示模式之间切换的 Memento 方法来实现它。这是完全不同的东西,还是我可以/应该将两者结合起来?

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

注意:我的模型非常小,通常不超过几 Kb,即使有用户交互,也不会增长太多。所以纪念品模式不会花费我任何东西。只是在它实施的地方继续使用它是否正确。

编辑

我想到的另一种可能性是通过视图模型方法处理显示模式。因此,不是每次都换出实际模型,就像我使用备忘录方法所做的那样,视图模型位于模型和视图之间,并以适合当前显示模式的方式“重构”模型数据。所以会有一个“默认”模式,它只是“按原样”呈现模型,但另一种模式是使用中间视图模型重构数据层次结构。在我看来,这种方法的主要缺点是它在应用程序架构中引入了另一个可变层,这可能被证明太脆弱而无法管理。基于备忘录的方法当然要简单得多。

4

0 回答 0