序列化与物化

时间:2013-07-04 09:16:44

标签: serialization terminology

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

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

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

1 个答案:

答案 0 :(得分:12)

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

此处的关键字是“serial”。德 '的串行' 化。串行表单数据,数据流。文件(txt,bin,xml,无论:文件),DB中的BLOB等

“实现”描述了一个抽象的“过程”,它将任何形状的“查询描述”和“原始数据”转换为与查询匹配的某些“可用数据”。它比'de / serialization'更通用。后者几乎总是明确地表示对象意味着从一些类似流的数据中“解包”,其中“实现”意味着对象是从任何合适/可用的描述重建的。

此处的关键字是,具体化。有一点,你有“抽象的想法”,它会在某个时间点被“物化”为具体的形式。

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

具有讽刺意味的是,我没有碰巧看到一个术语“非物质化”,这应该是一种抽象的方式来打破对象并将它们存储在一起。可能听起来很奇怪,就像被删除一样。人们倾向于使用“序列化”这个词有点不恰当或者只是“保存/存储/写入”,这有时会增加一些混乱。所以,你有时可能会听到人们使用ORM并将数据库“序列化”到三个表中的十五列,但是好吧......我认为这不是严格的序列化。