Правильный способ сериализации / десериализации сущности Xodus-dnq - PullRequest
0 голосов
/ 11 декабря 2018

Например - у меня есть эта сущность:

class XdUser(entity: Entity) : XdEntity(entity) {

    var someName by xdStringProp()
    var someNumber by xdIntProp()
}

Как правильно сериализовать / десериализовать ее из / в json?Я должен создать класс данных, который просто дублирует поля моей сущности, а затем распространяет значения в XdUser?Или есть другой способ?

1 Ответ

0 голосов
/ 11 декабря 2018

Сериализуя XdUser в JSON, вы должны быть уверены, что сериализатор не будет обрабатывать XdUser#entity и другие общедоступные ссылки, которые могут содержать большое количество ненужных данных.Десериализация приносит другие проблемы, потому что десериализатор должен быть проинформирован о том, как создать экземпляр класса из json, используя конструктор 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 должны предоставить делегата, который будет искать XdUser по xdId и получать / устанавливать значение, используя указанное свойство XdUser.Для ссылок / ссылок логика будет более сложной, но идея может быть такой же.

...