gpt4 book ai didi

C:使用序列化数据作为类型

转载 作者:行者123 更新时间:2023-11-30 15:35:37 27 4
gpt4 key购买 nike

所以我遇到了一个有趣的设计模式,我想知道你们对此有何看法。

基本上,设计将所有内容作为预序列化类型传递。例如,返回没有“类型”。它作为简单的 uint8_t* 传递。有一个定义的 header “告诉”您缓冲区中有什么,它有多大,缓冲区的版本是什么,等等。我将其称为“预序列化”,因为它强制扁平化所有结构。

优点:

  1. 您可以轻松地将它(甚至一组)写入您想要的任何内容。文件、IO,等等。
  2. 可以存储任意数据。

缺点:恕我直言:

  1. 没有类型安全将是一场噩梦
  2. 程序员必须解析代码。即使存在枚举类型,用户也必须知道该类型的含义。即使有解析类型的函数,程序员也必须知道这是要调用的函数。
  3. 版本 hell :更改代码会导致错误的链式 react 。因为每个地方的解析方式都不同,所以您不知道代码在哪里工作或在哪里损坏。
  4. 它是病毒式的:因为它是扁平的,所以您无法将 header “插入”外部数据的末尾。如果复制“数据”,您可以包装调用,但这可能会导致不必要的复制,而且速度会很慢。因此,要么您的代码比需要的速度慢,要么您符合这种数据结构。
  5. 它不是人类可读或可调试的。

您以前见过这种设计模式吗?这种设计模式有名字吗?我错过了什么?

最佳答案

Is there a name for this design pattern?

嗯,旧代码? :) 我在 30 年前的 Cobol 系统中见过这样的设计......

您所说的专家也可以通过使用XML 格式(或 JSON)轻松联系:

  1. 您可以轻松地将它(甚至一组)写入您想要的任何内容。文件、IO,无论什么 - 最重要的是网络服务!
  2. 可以存储任意数据。

此外,你所有的缺点都被消除了。

我在您的解决方案中看到的唯一优点是简洁 - 当每个字节都很重要并且您需要避免任何过于昂贵的开销时,那么这很好。

补充:Cobol有一个功能可以轻松定义此类序列化数据的结构,请参阅PICTURE条款。读取数据非常容易,您可以将它们作为变量读取。 (就像您有一个二进制数据并在 C 语言中定义一个结构,然后将二进制类型转换为结构。)

关于C:使用序列化数据作为类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22865478/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com