Вопрос проектирования архитектуры объекта - PullRequest
0 голосов
/ 02 февраля 2009

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

У меня есть класс Section, который имеет базовые свойства: Name, Description, et.al. Я использую список разделов для пользователей на выбор. Они могут добавлять раздел сколько угодно раз в родительский объект и любое количество разделов.

Когда они добавляют Раздел к родителю, они должны назначить, к какой группе он принадлежит (скажем, group1, group2, group3) и в каком порядке он будет отображаться. Это свойство группы отсутствует в таблице, когда я перечисляю разделы для выбора пользователя, группа не нужна, это не имеет смысла. Думайте об этом разделе, который они добавляют как клон с дополнительными свойствами.

У меня есть другая таблица с внешним ключом для Родителя и для Секции. Многие разделы могут быть добавлены к 1 родителю. В этой таблице ссылок также есть столбцы Grouping и DisplayOrder (а также несколько других) для каждого добавляемого раздела.

Итак, когда я создаю объект Parent и запрашиваю коллекцию его Разделов, хочу ли я попробовать использовать тот же класс Section и добавить свойство Grouping?

 Section 1
 Section 2
 Section 3


Parent 1
     Section 1 - Group = g1, DisplayOrder = 1
     Section 1 - Group = g2, DisplayOrder = 2
     Section 2 - Group = g2, DisplayOrder = 3
     Section 3 - Group = g3, DisplayOrder = 4

Parent 2
     Section 4 - Group = g3, DisplayOrder = 1
     Section 1 - Group = g2, DisplayOrder = 2
     Section 2 - Group = g3, DisplayOrder = 3

Скажите, если вы не понимаете, о чем я говорю, и я постараюсь объяснить это лучше ... или я удалю это и притворюсь, будто никогда не спрашивал. = Р

Ответы [ 4 ]

1 голос
/ 02 февраля 2009

Когда это возможно в иерархиях объектов, вы хотите избежать дочерних к родительским ссылкам. Это делает для очень тесной связи и неловких отношений.

Если я понимаю вашу проблему, я бы создал объект Group для вставки между родителями и разделами. Родитель будет иметь список групп, а каждая группа будет иметь список разделов.

Изменить в ответ на DisplayOrder:

Порядок отображения на самом деле является свойством родителя, а не разделов. Родитель содержит список разделов, и с этим списком связан определенный порядок.

1 голос
/ 02 февраля 2009

Звучит так, будто группа не является внутренним свойством раздела. Это имеет смысл только в отношении разделов к родителям. Учитывая это, я бы не стал добавлять групповое свойство. Может быть, создать класс контейнера раздела, который предоставляет группу:

interface IGroupedSection
{
    ISection Section { get; }
    string Group { get; }
}

или сделать группировку свойством родительского, например

interface IParent
{
     void AddSection(string group, ISection section);
     IEnumerable<ISection> GetSectionsInGroup(string group);
}

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

0 голосов
/ 02 февраля 2009

Я бы сделал group свойством Section. Затем вы можете добавить свойства для group1, group2 и т. Д. В Parent, используя LINQ, чтобы запросить в коллекции возврат только тех, которые есть в каждой группе (если вам нужно это сделать).

0 голосов
/ 02 февраля 2009

Я бы добавил свойство группы. Нулевое значение будет подходящим для раздела, который не был назначен родителю. Это похоже на поведение Owner в компонентах форм Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...