如何删除此并行层次结构

时间:2008-09-15 14:00:23

标签: inheritance oop

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

一个事件包含多轮,每轮包含许多表演(每个舞蹈一个)。每个表演都由许多评委评判,他们会返回一个评分表。

有两种类型的轮次,最后一轮(包含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回合

final_round - has_many final_performances final_performance - has_many final_scoresheets final_scoresheet - has_many placings

圆形 - 具有很好的表现 表现has_many记分表 记分表has_many召回

但是我不喜欢这需要的重复,而且我有几个并行的层次结构(对于圆形,性能和记分表),这将是一个难以维护。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

目前尚不清楚final_performance是否与性能完全不同。我猜他们得分不同;这应该反映在final_scoresheet的差异中,你可能认为你需要使final_performance不同,因为它必须包含final_scoresheets。也许你只能拥有一个表演对象,而不是让表演中包含的乐谱具有圆形对象将乐谱与表演联系起来:

round.getScoresheet(couple,dance)

而不是

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

我也想知道你是否需要用于放置和回忆的对象:它们是否只是(有序)从记分表中检索到的夫妇列表?如果是这样,那么你已经淘汰了三个班级。

遏制比继承更受欢迎。