【发布时间】:2008-10-23 14:17:09
【问题描述】:
让我从一个说明性示例开始(假设实现是使用静态类型语言,如 Java 或 C#)。
假设您正在构建内容管理系统 (CMS) 或类似的东西。数据按层次组织成Folders。每个文件夹都有一个孩子的集合;一个孩子可能是Page 或Folder。所有项目都存储在根文件夹中。不允许循环。我们有一个无环图。
系统将有一个远程 API,Folder 和 Page 的实例必须通过网络进行序列化/反序列化。对于文件夹的典型实现,其中文件夹的子级是List,根节点的序列化将发送整个图。由于显而易见的原因,这是不可接受的。
我很想知道人们过去已经解决了这个问题。
我有两个可能的建议:
- 查询导航:更改域模型,使文件夹类仅包含每个子项的 ID 列表。要访问一个孩子,我们必须查询它。序列化现在是微不足道的,因为图表在一个明确定义的点结束。主要缺点是我们失去了类型安全性 - ID 可能用于文件夹/子以外的其他内容。
- 停止并重新附加:在序列化过程中,只要我们检测到对文件夹或页面的引用,就会停止,而是发送 ID。反序列化时,我们必须查找每个 ID 的对应对象,并将其重新附加到新生对象的相关位置。
【问题讨论】:
标签: serialization oop