Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.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/4/oop/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
保存或放弃用户对对象的更改 我有一个应用程序,用户可以在屏幕上以一种形式(以C++代码表示的对象)更改数据,当用户想要关闭窗口时,我想询问是否应该保存或丢弃更改。p>_C++_Oop_Architecture_Software Design - Fatal编程技术网

保存或放弃用户对对象的更改 我有一个应用程序,用户可以在屏幕上以一种形式(以C++代码表示的对象)更改数据,当用户想要关闭窗口时,我想询问是否应该保存或丢弃更改。p>

保存或放弃用户对对象的更改 我有一个应用程序,用户可以在屏幕上以一种形式(以C++代码表示的对象)更改数据,当用户想要关闭窗口时,我想询问是否应该保存或丢弃更改。p>,c++,oop,architecture,software-design,C++,Oop,Architecture,Software Design,如果用户希望保存,则应将编辑的对象保存到数据库中,并且内存中的对象当然也应是最新的 如果用户希望放弃更改,我希望内存中的对象恢复到其以前的状态 我不知道如何尽可能有效地实现这一点,尤其是放弃更改。以下是我正在考虑的一些选择: 我在表单逻辑中的某个位置创建内存中对象的副本并对其进行更改,如果用户想要保存它,我将用更改后的对象替换以前的内存中对象 与上面相同,但对象以某种方式存储自身的副本,而不是将其放在形式逻辑中 我跟踪哪些表单字段已更改,并且仅在用户希望保存时更新相关对象成员(避免可能的大型复制

如果用户希望保存,则应将编辑的对象保存到数据库中,并且内存中的对象当然也应是最新的

如果用户希望放弃更改,我希望内存中的对象恢复到其以前的状态

我不知道如何尽可能有效地实现这一点,尤其是放弃更改。以下是我正在考虑的一些选择:

  • 我在表单逻辑中的某个位置创建内存中对象的副本并对其进行更改,如果用户想要保存它,我将用更改后的对象替换以前的内存中对象

  • 与上面相同,但对象以某种方式存储自身的副本,而不是将其放在形式逻辑中

  • 我跟踪哪些表单字段已更改,并且仅在用户希望保存时更新相关对象成员(避免可能的大型复制操作)


  • 这在应用程序中似乎很常见,因此可能有一种标准方法或设计模式可以做到这一点?

    是的,您可以对副本进行操作。这允许您在“取消”的情况下轻松放弃,并且您可以使用真实对象交换副本或交换指针。选择在很大程度上取决于内存中表示的大小以及预期的更改量。例如,对于图像处理:您可以存储原始图像、工作副本(显示已完成工作的结果)和已完成操作(及其参数)。这可能比存储导致结果的所有中间图像占用的内存要少得多。另一方面,对于撤消,您必须从“完成”队列中删除最后一个操作,并将其余操作重新应用于原始图像。这可能会非常耗时……这就提出了一种混合方法的想法:在完成一定数量的操作后存储中间图像,以便在最后一个操作撤消时不必重做所有操作。(这让我想起了视频压缩,它存储不同的图像,以减少单个图像(帧)的内存占用,但有时会插入完整的帧。)问问自己,为什么要尽可能高效地实现它,并选择最简单的解决方案,用最少的代码。