序列化与物化

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

例如,在处理对象/关系映射器(ORM)时,对象创建涉及Materialization,而使用Json / Xml格式创建对象则被视为反序列化.

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

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

这里的关键字是“serial”. De’serial’ization.串行表单数据,数据流.一个文件(txt,bin,xml,无论:文件),DB中的BLOB等.

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

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

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

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

转载注明原文:序列化与物化 - 代码日志