当我通过对象本身(面向对象的方式)恢复所有每个节点和边来反序列化对象图时,我发现存在严重的依赖问题。
例如,如果一个对象A
引用自己A
,(自循环引用)这意味着,它希望自己A
在恢复时处于完整的原始状态。因为它在被序列化的时候就是那个状态。
对于自引用的情况,它可以被检测到,因为它知道自己正在被恢复。但是如果A
需要另一个对象B
,它也应该期望另一个对象B
处于完整的原始状态。如果对象B
还引用了A
,那么现在又出现了循环引用 ,并且在不知道现在正在恢复A
的情况下,它变成了同样的问题。如果想使用while反序列化的一些属性,不保证存在。A
B
A
从根本上说,这个问题的发生是因为一个对象需要其他对象的完整状态,尽管它本身处于不完整状态。这没有意义。我曾考虑将恢复过程分为多个阶段,但这并没有真正的区别,因为实际上对象将保持不完整状态,直到所有阶段完成。
我可以为这个问题提供一些建议或好的解决方案吗?
PS。我开始编写代码来替代 Cocoa 的NSKeyedArchiver
. 所以我假设对象的编码是由对象本身完成的。(对于它的内部状态)所以它可能与一般图形问题不同。但我不能排除对象本身可以获得的隐藏状态......