0

次のシナリオに最適なデザインを見つけようとしています - ダンス競技会の結果を保存するアプリケーションです。

イベントには複数のラウンドが含まれ、各ラウンドには多数のパフォーマンス (ダンスごとに 1 つ) が含まれます。各パフォーマンスは、スコアシートを返す多くの審査員によって審査されます。

ラウンドには、ファイナル ラウンド (6 つ以下のダンス カップルを含む) と通常のラウンド (6 つ以上のダンス カップルを含む) の 2 種類があります。それぞれに、わずかに異なる動作とデータが必要です。

決勝ラウンドの場合、各スコアシートには、最終ショーでジャッジが 1 位、2 位などと付けた 6 カップルの順序付きリストが含まれます。私はこれらの順位を「スコアシートには 6 位が含まれる」と呼びます。順位にはカップル番号とそのカップルの順位が含まれます

通常のラウンドの場合、各スコアシートには順序付けられていない M カップルのセットが含まれます (M < ラウンドに参加するカップルの数 - 競技主催者によって決定される正確な値)。私はこれらのリコールを「M がリコールするスコアシート」と呼んでいます。リコールにはスコアやランキングは含まれません

例えば、ファイナルで

  • 1位:カップル56
  • 2位:夫婦234
  • 3位:夫婦 198
  • 4位:カップル98
  • 5位:カップル 3
  • 6位:カップル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 順位

ラウンド - has_many パフォーマンス パフォーマンス has_many スコアシート スコアシート has_many リコール

しかし、私はこれが必要とする複製が好きではありません。また、いくつかの並列階層 (ラウンド、パフォーマンス、スコアシート用) があり、維持するのが面倒です。

4

2 に答える 2

2

これには、私が持っていないドメイン知識が少し必要ですが、順序付けされた状況と順序付けられていない状況は少し無関係であるように思われます。各カップルにスコアがある場合、最終ラウンドの順序は各カップルのスコアから推測できますよね?つまり、最終ラウンドのデータ構造は、複数の(カップル、スコア)セットで構成される、他のすべてのラウンドのデータ構造と同じになります。

于 2008-09-15T14:05:39.793 に答える
0

何が起こっているのかを詳しく知らなければ、明確なアドバイスを与えることは困難です。ただし、私が読んだ内容に基づいて、並列階層は必要ないようです。

final_performance が実際に performance と異なることは明らかではありません。採点が異なると思います。これは final_scoresheet の違いに反映されるはずであり、おそらく final_scoresheets を含める必要があるため、final_performance を異なるものにする必要があると想定していました。おそらく、パフォーマンス オブジェクトを 1 つだけ持つことができ、スコアシートをパフォーマンスに含めるのではなく、ラウンド オブジェクトにスコアシートをパフォーマンスに関連付けさせることができます。

round.getScoresheet(couple,dance)

それよりも

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

また、順位付けとリコールにオブジェクトが必要かどうかも疑問です。それらは、スコアシートから取得したカップルの (順序付けられた) リストだけでよいのでしょうか? もしそうなら、あなたは 3 つのクラスを排除したことになります。

継承よりも包含が優先されます。

于 2008-11-26T15:50:06.843 に答える