s***n 发帖数: 10693 | 1 .net的
对某collection就行处理,处理前备份成array,如果处理过程中user cancel了,
recover这个collection from array
现有的实现方式是,user cancel后,remove everything from collection, 然后从
backup array中重新导入。
导入方式是iterate through every item in array,collection里生成新的object,
做deep copy. 结果这个deep copy过程有个bug,今天fix bug时,同事说你顺便把整个
流程改改吧,不要先全删再重加,只synchronize前后不一致的部分。
很让人费解,这样做的目的是什么,俺怎么完全看不出好处? |
c**t 发帖数: 2744 | 2 This is not data structure but a design pattern. You need check "Command
Pattern"
【在 s***n 的大作中提到】 : .net的 : 对某collection就行处理,处理前备份成array,如果处理过程中user cancel了, : recover这个collection from array : 现有的实现方式是,user cancel后,remove everything from collection, 然后从 : backup array中重新导入。 : 导入方式是iterate through every item in array,collection里生成新的object, : 做deep copy. 结果这个deep copy过程有个bug,今天fix bug时,同事说你顺便把整个 : 流程改改吧,不要先全删再重加,只synchronize前后不一致的部分。 : 很让人费解,这样做的目的是什么,俺怎么完全看不出好处?
|
s***n 发帖数: 10693 | 3 不是design pattern的问题,可能我没说清楚。
Collection是逻辑层的对象,用户ui对collection直接进行操作,可能会增加entry,
可能会remove entry,也可能edit entry。
用户在ui的操作对collection即时生效,但是他们最后可能click cancel,这样刚才所
有的操作都必须复原。
我觉得全部清空,再从backup导入不错,反而是他说只sync不一致的部分,这种方法
cost比较高,因为这不只是多一个少一个entry的问题,每个entry都可能被更新过,总
是要全部update的,没想明白有啥好处。
【在 c**t 的大作中提到】 : This is not data structure but a design pattern. You need check "Command : Pattern"
|
s***n 发帖数: 10693 | 4 而且伊提议用hashtable
真没看出这里用hashtable有任何的好处……
【在 s***n 的大作中提到】 : 不是design pattern的问题,可能我没说清楚。 : Collection是逻辑层的对象,用户ui对collection直接进行操作,可能会增加entry, : 可能会remove entry,也可能edit entry。 : 用户在ui的操作对collection即时生效,但是他们最后可能click cancel,这样刚才所 : 有的操作都必须复原。 : 我觉得全部清空,再从backup导入不错,反而是他说只sync不一致的部分,这种方法 : cost比较高,因为这不只是多一个少一个entry的问题,每个entry都可能被更新过,总 : 是要全部update的,没想明白有啥好处。
|
c**t 发帖数: 2744 | 5 Given editable grid as an example: cell x: original value is a;
1st edit => b;
2nd edit => c; then cancel; will you restore with a or b?
【在 s***n 的大作中提到】 : 不是design pattern的问题,可能我没说清楚。 : Collection是逻辑层的对象,用户ui对collection直接进行操作,可能会增加entry, : 可能会remove entry,也可能edit entry。 : 用户在ui的操作对collection即时生效,但是他们最后可能click cancel,这样刚才所 : 有的操作都必须复原。 : 我觉得全部清空,再从backup导入不错,反而是他说只sync不一致的部分,这种方法 : cost比较高,因为这不只是多一个少一个entry的问题,每个entry都可能被更新过,总 : 是要全部update的,没想明白有啥好处。
|
s***n 发帖数: 10693 | 6 user按cancel或ok才算一次结算。
如果结算在1st edit和2nd之间,then surely restore with a
【在 c**t 的大作中提到】 : Given editable grid as an example: cell x: original value is a; : 1st edit => b; : 2nd edit => c; then cancel; will you restore with a or b?
|
s***n 发帖数: 10693 | 7 比如窗口打开前前备份为a, b, c
结算后可能是b,d, 也有可能是a*, e
星号代表修改过的value
【在 s***n 的大作中提到】 : user按cancel或ok才算一次结算。 : 如果结算在1st edit和2nd之间,then surely restore with a
|
a9 发帖数: 21638 | 8 先clone出一个来行吗?
【在 s***n 的大作中提到】 : 比如窗口打开前前备份为a, b, c : 结算后可能是b,d, 也有可能是a*, e : 星号代表修改过的value
|
|
c**t 发帖数: 2744 | 9 use datatable, you can handle only changes or reject all changes (restore to
original)
【在 s***n 的大作中提到】 : user按cancel或ok才算一次结算。 : 如果结算在1st edit和2nd之间,then surely restore with a
|
M******k 发帖数: 27573 | 10 反正要是我,估计也是清了collection从头再来的. |