Как я могу сериализовать свойство Petrel в моем пользовательском источнике данных и загрузить его обратно? - PullRequest
0 голосов
/ 10 июня 2011

Я не очень "бегло" с сериализацией Ocean. Могу ли я сериализовать все свойство Petrel (свойства, сетки или любые другие объекты Petrel / Ocean) в свой пользовательский источник данных? Смогу ли я загрузить его обратно? Есть ли хорошая практика / шаблон для этого? Некоторый пример кода будет приветствоваться!

1 Ответ

2 голосов
/ 10 июня 2011

У вас уже есть установленный источник данных?Серверная часть персистентности (SQL? XML?), Используемая вашим источником данных, определяет, как хранятся данные.Любые данные, которые вы хотите сохранить через источник данных, должны быть преобразованы в формат вашего сервера.

Обратите внимание, что не существует такой вещи, как «сериализация в океане» с источниками данных - вы (и только вы) находитесь под полным контролемисточника данных.Обычно вы фактически предоставляете его в качестве службы для Ocean, чтобы он, учитывая Droid, мог разрешать один из ваших объектов (будь то, например, объекты пользовательского домена, пакеты аргументов рабочего шага или пакеты аргументов сейсмического атрибута),

Теперь, исходя из вашего вопроса, похоже, что вы пытаетесь хранить глубокие копии данных Petrel, о которых вы упомянули.Это действительно дело?Если да, то, боюсь, вам нужно будет создать собственные структуры данных, представляющие эти данные, отражающие то, что вы можете прочитать через API-интерфейсы Ocean.

Если то, что вы действительно хотите сохранить, является слабым ссылаясь на данные Petrel (реализуя IIdentifiable), вы захотите сохранить содержимое Droid каждого объекта - гораздо более простая задача.

Затем, когда ваши постоянные данные будут обработаны из вашего источника данных, выперестроил бы дроидов, которые затем могут быть решены сами (используя какой-то другой источник данных, кроме вашего собственного), что привело бы к регулярной сильной ссылке .NET на объект - при условии, конечно, что эти данные присутствуют в загруженном в данный момент проекте.

Пример SimpleDataSourceEx в Ocean SDK демонстрирует простой источник данных, поддерживаемый файлом .dat с использованием BinaryFormatter.Это относительно тривиально для модификации на другие бэк-энды.Я настоятельно рекомендую XML поверх BinaryFormatter, но если вы собираетесь хранить значительные объемы больших объемов данных, вам следует рассмотреть базу данных.В Blueback Reservoir XML очень хорошо отвечает нашим потребностям.

Небольшое предостережение: убедитесь, что объекты, которые вы храните в вашем DataSource, реализуют IDisposable (а также IIdentifiable), чтобы освободить ресурсы в DataSource.

...