Хранение / сериализация списка объектов - PullRequest
1 голос
/ 02 августа 2010

Я часто сталкиваюсь с тем, как правильно сохранить список объектов как свойство в классе и как правильно сериализовать их в XML.

Например, у нас есть класс TabGroup, который будет содержать ноль или несколько вкладок.

Лучше ли иметь список свойств вкладок или список ссылок на вкладки? При условии, что вкладки идентифицируются слизнями, которые являются уникальными.

List<Tab>

List<string>

В итоге все сводится к

  1. Сериализация только всего графа TabGroup (который будет содержать все его вкладки и их содержимое)
  2. Сериализация вкладок и групп вкладок независимо и их раздельное обслуживание и ссылки через список слагов в сериализованном графе вкладок.

Самый заметный профи 1:

  • Tabgroup полностью сохраняется в одном сериализованном файле, сохраняя простую структуру хранилища данных.

Самый заметный минус 1:

  • каждый раз, когда производится обновление одной из содержащихся вкладок, Tabgroup также должен обновляться (повторно сериализироваться).

Самый заметный профи из 2:

  • обновление вкладок не требует повторной инициализации Tabgroup (по крайней мере, когда ничего не было добавлено или удалено), поскольку ссылки остаются прежними; поэтому только обновленная вкладка должна быть снова сериализована.

Самый заметный минус из 2 (это главная причина, почему я пишу это)

  • отдельные файлы вкладок могут быть удалены в хранилище файлов, но список ссылок остается прежним, поэтому при просмотре / отображении групп вкладок возникают ошибки / исключения; сложная логика должна быть реализована, чтобы вывести что-то вроде: «Tab был удален из хранилища данных неподдерживаемым способом, удалить его также из Tabgroup?»

Что вы предлагаете для решения этой проблемы? Я приму ответ, который охватит широкий спектр последствий. Обратите внимание, что здесь мы говорим только о постоянстве XML, очевидно, в SQL у нас мало места для экспериментов, так как Tabgroups и Tabs в любом случае обычно бывают в отдельных таблицах (с отношением один-много между ними).

1 Ответ

1 голос
/ 02 августа 2010

Если у вас нет веских причин, по которым усложнять хранилище данных является хорошей идеей, вам, как правило, следует сохранять простоту. Во-вторых, прочитав весь пост дважды, я не очень понимаю, в чем ваш вопрос.

Я не совсем уверен, в чем ваша проблема, но если вы спрашиваете, должен ли ваш дизайн возвращать List<Tab> или List<string>, где каждая строка представляет ссылку на вкладку, то я бы поспорил для List<Tab> , Вы можете лениво загрузить всю структуру, за исключением идентификатора или того, что вы использовали для ссылки, если загрузка является проблемой. Как правило, это просто упрощает получение того, что вы искали, непосредственно из объекта, вместо того, чтобы получать список ссылок и загружать все ссылки по отдельности.

Без дополнительной информации, относящейся к конкретной проблеме, я сомневаюсь, что кто-либо сможет помочь вам больше, чем просто дать несколько длинных плюсов / минусов в зависимости от предполагаемых обстоятельств.

...