2008-09-15 8 views
0

J'essaie de trouver le meilleur design pour le scénario suivant - une application pour stocker les résultats des compétitions de danse.Comment faire pour supprimer cette hiérarchie parallèle

Un événement contient plusieurs tours, chaque tour contient un certain nombre de performances (une par danse). Chaque performance est jugée par de nombreux juges, qui retournent une feuille de match.

Il existe deux types de rondes, une ronde finale (contenant 6 couples de danse ou moins) ou une ronde normale (contenant plus de 6 couples de danse). Chacun nécessite un comportement et des données légèrement différents. Dans le cas d'un tour final, chaque feuille de match contient une liste ordonnée des 6 couples de l'épreuve finale qui couple le juge classé 1er, 2e, etc. J'appelle ces classements «une feuille de pointage contient 6 classements». Dans le cas d'un tour normal, chaque feuille de match contient un ensemble non ordonné de M couples (M < le nombre de couples entrés dans le tour - valeur exacte déterminé par l'organisateur de la compétition). J'appelle ces rappels: "une feuille de score comme M rappelle". Un rappel ne contient pas un score ou un classement

par exemple Dans une finale

  • 1ère place: En couple 56
  • 2ème place: deux 234
  • 3ème place: En couple 198
  • 4ème place: En couple 98
  • 5e place: deux 3
  • 6e place: En couple 125

Pour un tour normale couples suivants sont rappelés 54,67,201,104,187,209,8,56,79,35,167,98

Ma version naïve de c'est implémenté comme

événement - has_one final_round , has_many arrondit

final_round - has_many final_performances final_performance - has_many final_scoresheets final_scoresheet - has_many 0

classement

ronde - perforomances has_many performances has_many feuille de pointage feuille de match has_many rappelle

Cependant, je n'aime pas la duplication que cela exige, et j'ai plusieurs hiérarchies parallèles (pour la deuxième ronde, la performance et feuille de match) qui va être une douleur Maintenir.

Répondre

2

Cela nécessite une petite connaissance du domaine que je n'ai pas, mais il me semble que la situation ordonnée par rapport à non-ordonnée est un peu hors de propos. Si chaque couple a un score, l'ordre dans le dernier tour peut être déduit du score de chaque couple, non? Cela signifierait que la structure de données du dernier tour serait comme la structure de données de chaque autre tour, composée de plusieurs ensembles (couple, score).

0

Sans savoir en détail ce qui se passe, il est difficile de donner des conseils clairs. Cependant, d'après ce que j'ai lu, il semble que votre hiérarchie parallèle ne soit pas nécessaire.

Il n'est pas clair qu'une performance finale soit vraiment différente d'une performance. Je suppose qu'ils sont marqués différemment; cela devrait se refléter dans les différences de final_scoresheet, et vous avez probablement supposé que vous deviez rendre final_performance différent car il devait contenir final_scoresheets. Peut-être que vous pourriez avoir qu'un seul objet de performance, et plutôt que d'avoir les feuilles de pointage contenues dans les performances ont les feuilles de pointage associés d'objet rond avec des performances:

round.getScoresheet(couple,dance) 

plutôt que

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

Je me demande aussi si vous avez besoin objets pour les classements et les rappels: peuvent-ils être simplement (ordonnés) des listes de couples récupérés des feuilles de pointage? Si c'est le cas, vous avez éliminé trois classes.

Le confinement est préféré à l'hérédité.

Questions connexes