serialize/deserialize Xodus-dnq 实体的正确方法
A proper way to serialize/deserialize Xodus-dnq entity
例如 - 我有这个实体:
class XdUser(entity: Entity) : XdEntity(entity) {
var someName by xdStringProp()
var someNumber by xdIntProp()
}
serialize/deserialize from/to json 的正确方法是什么?
我必须创建数据 class 来复制我实体的字段,然后将值传播到 XdUser?还是有别的办法?
将 XdUser 序列化为 JSON 您应该确保序列化程序不会处理 XdUser#entity
和其他 public 链接,它们会暴露大量不必要的数据。反序列化带来了另一个问题,因为应该告知反序列化器如何使用构造函数 XdUser(entity: Entity)
.
从 json 实例化 class
从我的预期更好的选择是有另一层休息API。它带来了控制公开数据量、控制权限(如果您有权限)以及实体更新方式的能力。
休息api级别是这样实现的:
open class EntityVO<T: XdEntity>(xdId: String?) {
}
class UserVO(xdId: String?): EntityVO<XdUser>(xdId: String?) {
var someName by delegateTo(XdUser::someName)
var someNumber by delegateTo(XdUser::someNumber)
}
和 delegateTo
应该提供委托,它将通过 xdId 查找 XdUser 并使用指定的 XdUser 属性 执行 get/set 值。对于link/links,逻辑会更复杂,但想法可以相同。
例如 - 我有这个实体:
class XdUser(entity: Entity) : XdEntity(entity) {
var someName by xdStringProp()
var someNumber by xdIntProp()
}
serialize/deserialize from/to json 的正确方法是什么? 我必须创建数据 class 来复制我实体的字段,然后将值传播到 XdUser?还是有别的办法?
将 XdUser 序列化为 JSON 您应该确保序列化程序不会处理 XdUser#entity
和其他 public 链接,它们会暴露大量不必要的数据。反序列化带来了另一个问题,因为应该告知反序列化器如何使用构造函数 XdUser(entity: Entity)
.
从我的预期更好的选择是有另一层休息API。它带来了控制公开数据量、控制权限(如果您有权限)以及实体更新方式的能力。
休息api级别是这样实现的:
open class EntityVO<T: XdEntity>(xdId: String?) {
}
class UserVO(xdId: String?): EntityVO<XdUser>(xdId: String?) {
var someName by delegateTo(XdUser::someName)
var someNumber by delegateTo(XdUser::someNumber)
}
和 delegateTo
应该提供委托,它将通过 xdId 查找 XdUser 并使用指定的 XdUser 属性 执行 get/set 值。对于link/links,逻辑会更复杂,但想法可以相同。