5

有人可以指出差异(如果有的话)以及何时使用每个术语是合适的吗?

例如,在处理Object/Relational Mappers(ORM)时,对象创建涉及Materialization,而使用Json/Xml格式的对象创建被认为是Deserialization

我可以想到一些核心差异,但我很想知道这些术语是否有更正式的定义,因为我找不到。

4

1 回答 1

18

“反序列化”几乎专门与“序列化”一起使用。当您的对象或对象图完全转换为要存储的“数据流”(即作为文件或单个数据库记录)时,这些术语描述了“工作流程”。通常单身。然后,在某个时间点,它被检索并“反序列化”,因此“解包”回对象或对象图。它们成对使用。如果您曾经说过您的 XYZ 对象已被序列化,那么稍后它将被反序列化。当您的对象以不能称为“序列化”的方式存储时,尽量不要使用“反序列化”一词。

这里的关键字是“串行”。去'连载'化。串行表单数据,一个数据流。一个文件(txt、bin、xml 等:文件)、数据库中的 BLOB 等。

“物化”描述了一个抽象的“过程”,它将任何形式的“查询描述”和“原始数据”转换为与查询匹配的一些“可用数据”。它比“反序列化”更通用。后者几乎总是明确地意味着对象应该从一些类似流的数据中“解包”,而“物化”意味着对象是从任何合适/可用的描述中重建的。

这里的关键字是,嗯.. materialization。在某一时刻,你有一个“抽象的想法”,它在某个时间点被“物化”成具体的形式。

“物化”用于查询和分析数据的范围。构建查询时,您可以定义一些源、过滤器、聚合、投影等。但是,通常您不能一次“仅构建查询”作为一个整体或放入代码中。因此,您的查询将分部分构建。但是,查询的某些部分可能已经格式化和可执行,只是传递给扩展。它仍然是一个“定义”、抽象的东西,还没有“物化”。稍后,在某个时间点将执行您的查询并获取结果。结果现在将是“具体化”和可读的,这与您刚刚有一个“查询”但仍然只是“准备”的早期状态相反。现在将其连接到 ORM 及其定义类和表之间映射的自定义方式,

具有讽刺意味的是,我没有碰巧看到“去物质化”这个词,它应该是一种抽象的方式来分解对象并以某种方式存储它们。可能听起来太奇怪了,好像要被删除一样。人们倾向于不恰当地使用“序列化”这个词,或者只是“保存/存储/写入”,这有时会增加一些混乱。因此,您有时可能会听到人们使用 ORM 并将数据库“序列化”到三个表中的 15 列中,但是……我认为这不是严格意义上的序列化。

于 2013-07-04T09:38:26.993 回答