Должны ли элементы XML иметь родителей для группировки? - PullRequest
3 голосов
/ 16 декабря 2009

Какое соглашение было бы предпочтительным и почему (включая некоторые плюсы и минусы одного над другим)?

Это:

<company>
    <employees>
        <employee />
        <employee />
        <employee />
    </employees>
    <buildings>
        <building />
        <building />
    </building>
</company>

или это:

<company>
    <employee />
    <employee />
    <employee />
    <building />
    <building />
</company>

Ответы [ 5 ]

2 голосов
/ 16 декабря 2009

Обычно при работе с XML в программировании вам часто требуется преобразовать его в объекты, которые ваша программа может использовать. Большинство XML-сериализаторов принимают элементы для представления свойств родительского элемента.

Когда вы группируете их, как в вашем верхнем примере, сериализаторы могут интерпретировать это как одно свойство коллекции или массива. В этом случае у вас будет Company со свойством Employees, представляющим собой коллекцию Employee объектов.

Если вы сделаете это вторым способом, у вас получится объект Company со свойствами "Employee", "Employee2", "Employee3" или чем-то подобным. Когда вы программируете, это не очень хороший объектный дизайн.

1 голос
/ 16 декабря 2009

Нет семантических причин для явного представления коллекции через определенный элемент. В конце концов, оба документа имеют одинаковое значение - они представляют компанию со всеми ее сотрудниками и зданиями.

Однако в первом примере есть дополнительные преимущества:

  • он более читабелен и может быть полезен изложения в редакторах.
  • Вы можете создать более строгую схему
  • проще сериализовать в строго типизированные коллекции
  • Вы можете указать атрибуты элемента коллекции, которые применяются ко всем элементам внутри

С другой стороны, второй пример также имеет некоторые свои преимущества (хотя я считаю, что, по крайней мере, эти сомнительные):

  • менее болтливый / использует меньше памяти
  • проще обрабатывать с помощью не-XML инструментов
1 голос
/ 16 декабря 2009

Существуют ли атрибуты или данные, которые вы могли бы прикрепить к всем сотрудникам в группе ? Обычно я бы пошел на первый пример (элемент группировки), поскольку он дает вам свободу

  1. создать несколько групп
  2. прикрепить данные к группе в целом

Это немного более многословно, но дает вам гораздо больше гибкости при движении вперед.

0 голосов
/ 16 декабря 2009

Я подхожу к этому, думая о том, какие данные вы представляете.

В C # я вижу это:

// Top Example:
public class Company
{
  public Employee[] employees;
  public Building[] buildings;
}

// Vs. Bottom Example:
public Things[] employeesAndBuildings;

Логично, что здания и служащие - это не одно и то же. Поскольку в вашей компании несколько зданий и несколько сотрудников, вы должны логически разделить две группы.

Второй пример короче, и в зависимости от того, в каком формате он читает, читатель может так же легко разделить два элемента. Для удобства чтения формат может стать более нечитаемым, когда все идет в другом порядке:

<company>
    <employee />
    <building />
    <employee />
    <building />
    <employee />
</company>

Я бы пошел на первый формат.

0 голосов
/ 16 декабря 2009

Чтобы ответить на ваш вопрос вопросом ... Как элементы группировки влияют на читабельность как визуально, так и программно?

Сгруппированный метод (с <employees> и <buildings>) более нагляден.

Несгруппированный метод немного более лаконичен для запроса XPath, /company/employees/employee против /company/employee.

Итак, это может быть 6 из одного, полдюжины из другого.

...