代码之家  ›  专栏  ›  技术社区  ›  Dustin Brooks

对象体系结构设计问题

  •  0
  • Dustin Brooks  · 技术社区  · 16 年前

    我想知道如何最好地安排这个。我会解释我现在有什么,但我想知道是否有更好的方法来做这件事。

    我有一个具有基本属性的类部分:名称、描述等。我使用一个分区列表供用户选择。它们可以向父对象和任意数量的节添加任意次数的节。

    当他们向父级添加一个节时,他们必须分配它所属的组(比如group1、group2、group3)以及它的显示顺序。这个组属性不在表中,当我列出供用户选择的部分时,不需要组,这是没有意义的。把他们添加的这个部分想象成一个具有额外属性的克隆。

    我有另一个表,它有一个指向父级和节的外键。许多节可以添加到一个父级。在这个链接表上,还有分组和显示顺序列(以及其他一些列),它们是为每个节添加的。

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

     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

    4 回复  |  直到 16 年前
        1
  •  1
  •   Andy    16 年前

    听起来,组不是一个部分的固有属性。它只在与家长联系时才有意义。鉴于此,我不会添加组属性。可以创建一个公开组的节容器类:

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

    或使分组成为父级的属性,例如

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

    毕竟,您可能需要多个分区分组策略,因此最好不要将您的分区设计与可以包含在其中的集合类型结合起来。

        2
  •  1
  •   17 of 26    16 年前

    如果可能,在对象层次结构中,您希望避免子级到父级的链接。这会导致非常紧密的耦合和尴尬的关系。

    假设我理解您的问题,我将创建一个组对象,在父级和节之间插入。父级将有一个组列表,每个组将有一个节列表。

    根据显示顺序编辑:

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

        3
  •  0
  •   C. Ross trotttrotttrott    16 年前

    我将添加Group属性。空值适用于尚未分配给父级的节。这类似于所有者在Windows窗体组件中的行为。

        4
  •  -1
  •   jhunter    16 年前

    我将使组成为区段的属性。然后,可以在父级上添加group1、group2等的属性,使用linq查询集合,只返回每个组中的属性(如果需要这样做的话)。