0

我正在尝试为以下场景找到最佳设计 - 一个存储舞蹈比赛结果的应用程序。

一个事件包含多轮,每轮包含许多表演(每支舞一个)。每场表演都由许多评委进行评判,评委会返回一张计分表。

有两种类型的轮次,最后一轮(包含 6 对或更少的舞蹈对)或正常轮(包含超过 6 个舞蹈对)。每个都需要稍微不同的行为和数据。

在最后一轮的情况下,每张计分表都包含决赛中 6 对夫妇的有序列表,显示法官将哪对夫妇排在第 1 名、第 2 名等。我称这些排名为“计分表包含 6 个排名”。一个位置包含一对夫妇的号码,这对夫妇是什么地方

在正常轮次的情况下,每个计分表包含一组无序的 M 对(M < 进入轮次的对数 - 由比赛组织者确定的确切值)。我将这些回忆称为:“M 回忆的记分表”。召回不包含分数或排名

例如在决赛中

  • 第一名:56对
  • 第二名:情侣234
  • 第三名:情侣198
  • 第四名:情侣98
  • 第五名:情侣3
  • 第六名:情侣125

为正常一轮以下夫妇被召回54,67,201,104,187,209,8,56,79,35,167,98

我的天真版本实现为

事件 - has_one final_round, has_many rounds

final_round - has_many final_performances final_performance - has_many final_scoresheets final_scoresheet - has_many 排名

回合 - has_many 表现 表现 has_many scoresheets scoresheet has_many 回忆

但是我不喜欢这需要的重复,而且我有几个并行的层次结构(用于回合、性能和计分表),这将是一个痛苦的维护。

4

2 回答 2

2

这需要一点我没有的领域知识,但在我看来,有序与无序的情况有点无关紧要。如果每对情侣都有一个分数,那么最后一轮的排序可以从每对情侣的分数中推断出来,对吧?这意味着最后一轮的数据结构将与其他轮次的数据结构一样,由多个(对,分数)集组成。

于 2008-09-15T14:05:39.793 回答
0

如果不详细了解发生了什么,就很难给出明确的建议。但是,根据我阅读的内容,您的并行层次结构似乎没有必要。

尚不清楚 final_performance 是否真的与 performance 不同。我猜他们的得分不同;这应该反映在 final_scoresheet 的差异中,并且您可能认为您需要使 final_performance 不同,因为它必须包含 final_scoresheets。也许您可以只有一个表现对象,而不是让成绩表包含在表现中,而是让圆形对象将成绩表与表现相关联:

round.getScoresheet(couple,dance)

而不是

round.getPerformance(couple,dance).getScoresheet()

我还想知道您是否需要用于放置和召回的对象:它们可以只是从记分表中检索到的(有序的)夫妻列表吗?如果是这样,那么您已经消除了三个类。

包容优于继承。

于 2008-11-26T15:50:06.843 回答