2009-02-02 4 views
0

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

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

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

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

Итак, когда я создаю объект Parent и запрашиваю коллекцию его разделов, могу ли я попытаться использовать тот же класс класса и добавить свойство 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 

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

+0

Когда вы добавляете раздел в родительский элемент, добавляете ли вы новый раздел или ссылку на один раздел, который можно добавить несколько раз? – plinth

+0

Я добавляю ссылку на раздел, который уже существует, но в этой ссылке я добавляю дополнительные поля, такие как Group и DisplayOrder –

+0

Если это тот же/раздел, то вам нужен класс, содержащий раздел и уникальный информация, которая не будет использоваться совместно. – plinth

ответ

1

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

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

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

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

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

+0

В конечном итоге я использовал это решение, а точнее - «группировать свойство родителя». –

0

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

-1

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

1

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

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

Редактировать в ответ на DisplayOrder:

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

+0

Мне нравится это решение. Как я могу обработать DisplayOrder (я обновил выше). У каждого добавленного раздела также есть DisplayOrder (порядок их отображения на экране). Мне нужны две таблицы ссылок? Родительская группа> Группа> GroupSection> Раздел с разделом Группы, который знает DisplayOrder? –

Смежные вопросы