跳到主要内容
版本:0.16

Schema 演化

Fory 通过兼容模式支持 Schema 演化。

启用兼容模式

let fory = Fory(xlang: true, trackRef: false, compatible: true)

示例:演化一个结构体

import Fory

@ForyObject
struct PersonV1 {
var name: String = ""
var age: Int32 = 0
var address: String = ""
}

@ForyObject
struct PersonV2 {
var name: String = ""
var age: Int32 = 0
var phone: String? = nil // 新增字段
}

let writer = Fory(xlang: true, compatible: true)
writer.register(PersonV1.self, id: 1)

let reader = Fory(xlang: true, compatible: true)
reader.register(PersonV2.self, id: 1)

let v1 = PersonV1(name: "alice", age: 30, address: "main st")
let bytes = try writer.serialize(v1)
let v2: PersonV2 = try reader.deserialize(bytes)

assert(v2.name == "alice")
assert(v2.age == 30)
assert(v2.phone == nil)

兼容模式下的安全变更

  • 新增字段
  • 删除旧字段
  • 调整字段顺序

不安全的变更

  • 随意修改已有字段的类型(例如从 Int32 改成 String
  • 节点之间的注册映射不一致

Schema 一致模式行为

compatible=false 时,Fory 会校验 schema 哈希,并在不匹配时快速失败。