我像这样模拟了两个类:
ClassA -- n:1 --> ClassB
ClassB 对 ClassA 一无所知(单向关系)。现在我正在为 ClassA 编写一个文件加载器,它使用(并且不拥有)一个 ClassB 对象。
代码方面的 ClassA 持有指向 ClassB 的指针,这就是我的问题出现的地方:加载程序只负责加载 ClassA,无法访问包含所有 ClassB 对象的容器,因此不可能建立关系。
一个解决方案是向 ClassA 插入一个字符串成员,其中包含 ClassB 对象的 ID,以便稍后可以建立关系。但是,问题是是否有任何其他方法可以解决此问题。加载后我不再需要该 ID,因此我想将其省略。
应加载的 ClassA 文件示例:
Id: "some-id" # Irrelevant for this example. ;-)
ClassB: "some-classb-id"
ClassA 拥有指向 ClassB 对象的一个指针。加载程序现在反序列化 ClassA 并且不加载任何 ClassB 对象,而只是与已经存在的 ClassB 对象建立关系。这是因为 ClassB 对象是预加载的,而 ClassA 对象可以在运行时添加。
ClassA 中的 ClassB 指针可能为 NULL,这完全没问题(这是一个可选关系)。
最佳答案
我只想到了 2 种方法:
- 最简单的方法是 定义 ClassB 的 1 个所有者 (ClassC) 对象,然后将 ClassB 传递给 用户ClassA。这意味着添加 依赖于另一个(新)类,但据我所知,一些类仍然必须分发 ClassB。
- 再脏一点就够了 ClassA 只加载 ClassB 和 ClassB 第一次加载。但这会 不允许加载 ClassB 超过 一次(解决方案可能是通过一个新的 需要时将 B 类转到 A 类。
关于c++ - 1 :n relation in OOP regarding to deserialisation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5536364/