我一直在构建一个Web绘图程序,其中用户的图稿的状态被保存为json对象。每次我添加到客户端的撤销堆栈(只是一个描述项目状态的json对象数组)时,我也希望将状态保存到服务器。
我想知道是否有一种优雅的方法[1]只发送差异然后[2]能够稍后下载项目并重新创建项目的当前状态?我担心这可能会变得混乱,并且趋向于在每个撤消步骤中上传完整的json项目状态。对项目有任何建议或指针,可以优雅地解决这类问题吗?
答案 0 :(得分:2)
有趣 - 而且非常大 - 问题。 许多实现/模式/解决方案适用于此问题,它们会根据您跟踪更新的“文档”类型而有所不同。 无论如何,一个避免生气的简单方法是,而不是保存“状态”,保存“产生这些状态的命令”。
如果你的应用程序是完全确定的(我认为它是,因为它是一个绘画程序),你可以确定在给定时间和每个命令在每次执行时,结果都是相同的。
所以,我会记下一个代表程序中可用命令的“字母”:
等等。您可以从SVG实施中获取灵感。然后向/从服务器推送/拉出命令串:
timestamp: MOVE[0,15]DRAW[15,20,4,#000000]ERASE[4,8,10]DRAW[15,20,4,#ff0000]
这显然只是一种普遍的,伪编码的想法。希望你能得到一些灵感。