2009-02-02 109 views
0

我试图弄清楚如何最好地将其表示出来。我会解释我现在拥有的,但我想知道是否有更好的方法来做到这一点。对象体系结构设计问题

我有一个类具有基本属性的部分:名称,描述,et.al.我使用一个部分列表供用户选择。他们可以根据需要向Parent对象和任意数量的节添加一个Section。

当他们向家长添加一节时,他们必须分配它所属的组(可以说group1,group2,group3)以及它将按什么顺序显示。该组属性不在桌面上,当列出用户选择的部分时不需要该组,所以这是没有意义的。想想这部分他们将添加为具有额外属性的克隆。

我有另一个表,有一个外键和父节。许多部分可以添加到1个父级。在这个链接表上还有他们添加的每个部分的Grouping和DisplayOrder列(以及其他一些列)。

因此,当我创建父对象并查询其部分的集合时,我是否想尝试使用相同的部分类并添加分组属性?

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 2009-02-02 16:35:49

+0

我添加了对已存在的部分的引用,但在该引用中,我添加了像Group和DisplayOrder这样的额外字段 – 2009-02-02 16:38:21

+0

如果是/ same /部分,则需要一个类来包含该部分和唯一不会共享的信息。 – plinth 2009-02-02 16:39:57

回答

1

这听起来像这个组不是一个部分的内在属性。将章节与父母联系起来才有意义。鉴于此,我不会添加组属性。可能创建一个公开该组的分段容器类:

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

或者使父组的属性

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

您可能需要多于一个的部分分组策略,毕竟,所以最好不要夫妇的部分设计,它可以被包含在该类型的集合。

0

我会添加组属性。空值适用于尚未分配给父级的部分。这与Windows窗体组件中的Owner的行为类似。

-1

我会让组的一个属性的部分。然后,您可以在使用LINQ的Parent上为group1,group2等添加属性,以查询仅返回每个组中的那些集合(如果需要的话)。

1

尽可能在对象层次结构中,您希望避免子对父链接。它会造成非常紧密的联系和尴尬的关系。

假设我明白你的问题,我会创建一个Group对象来插入父母和部分之间。父母会有一个组列表,每个组都会有一个列表。

编辑响应于DisplayOrder:

显示顺序实际上是父的一个属性,而不是部分。父级包含部分列表,并且该列表具有与其关联的特定顺序。