序列化(Serialization)

当前查看的版本是由机器翻译自简体中文,并进行人工校对的结果。若文档中存在任何翻译不当的地方,欢迎点击此处提交您的翻译建议。

由于在 Claptrap 系统中需要对事件和状态进行传输与存储,因此需要对事件和状态进行序列化,这样才能够应对种类繁多的传输和存储方案。

如何选择序列化方案

可选的序列化方式多种多样,典型的就如:JSON、MessagePack、Protobuf 等等。实际项目中序列化的方案可以基于以下几点进行考虑:

  1. 可读性。如果对可读性有越高的要求,则越应该考虑以文本为主的序列化方案。
  2. 传输效率、存储空间利用率。如果对于传输效率和存储空间有越高的要求,则越应该考虑以二进制为主的序列化方案。

在 Claptrap 系统中,由于每个 Claptrap 都有完全独立的可定制性,因而开发者可以为不同的 Claptrap 选择不同的序列化方案。但唯一需要注意的就是,序列化方案一旦选定就很难变更,故需在设计阶段就慎重考虑。

序列化与载体的独立性

在 Claptrap 框架中,存储、传输和序列化是相互独立。换言之,可以在传输时使用更利于阅读的 JSON 序列化,在存储时选择更有利于存储利用率的二进制序列化,反之亦然。

序列化与载体的制约性

在面对特定的存储或者传输的载体时,序列化的方式也将受到限制。例如:当前正在使用一种不支持二进制直接存储的数据库来作为事件的持久层,那么选择想要通过二进制序列化来保存事件就将变得不可行。故而,在选择序列化方案之前,需要优先确定传输和存储方案。

目前,所有支持的序列化方案均以“Newbe.Claptrap.DataSerializer.*”的名称发布在 nuget 上。