2012-02-23 81 views
0

试图找出设计分层结构的最佳方法。一个例子就是体育联盟结构。分层设计所需的建议

冰球联赛有两个会议A和B.

会议A有分歧东,西

会议B有师北,南,东,西。

团队可以按部门或会议显示。

实际上只有一个联盟,它可能有多个会议,每个会议都有多个部门。每个人的大小可能不同。主要关心的是当我需要查询时。例如,布局结构的好方法是什么,这样我就可以取得部门中的所有团队,会议中的所有团队或其他团队部门或会议中的所有团队,而不会过于繁琐。

任何帮助,非常感谢。 :)

回答

0

真的有两种方法可以采取。其一是“纯粹”的设计,你实际上有一个层次:

League hasA collection of Conferences 
Conference hasA collection of Divisions 
Division has a collection of Teams 

你的联赛则需要通过法司,会议或全部给球队的集合。根据你需要做的事情,也许你只有联盟提供迭代器而不是集合。

第二种方法是平的或者更databasey:

League hasA collection of Teams 
Team hasA Conference 
Team hasA Division 

通过这种方法,你可以轻松地操纵根据司和会议团队和过滤器,但它是很难做的东西为司或会议(你必须通过所有的团队来找出哪些部门存在)

这一切都归结到手头的问题。我的主要问题是:

  • 你与数据有什么关系?
    • 你需要汇报会议或分部吗?
    • 您是否需要在层次结构中输出?
  • 输入数据是否使一种方法更容易?
    • 如果输入是一个平坦的数据库表,平坦地存储它可能是一件容易的事!

我想不出一个很好的理由不使用hierarhy方法。

0

我不知道你正在使用哪种语言,但假设你可以使用多态和类,我会说使用设计模式,如Composite Pattern

设计你“复合”作为会议类和“叶”作为devision类。

这个想法是让会议类能够添加devisions到一个孩子列表,然后从调用一个函数,能够对这些孩子执行任何必需的操作。每个会议都可以有其他的会议,因此可以在不同的会议和他们的设计之间进行沟通。

这一切都取决于你如何编码它以及你需要执行什么操作。