it-swarm-ja.com

個人またはチームの間に存在する可能性のあるスポーツをモデル化する場合、どのように名前を付ければよいですか?

テニスはシングルスまたはダブルスでプレーされます。 「プレーヤー」はダブルスを考慮に入れないため、テニススコアリングモデルのロジックがその命名全体を通じて「チーム」を参照するようにすることを検討しました。ただし、両方のモードに対応するためにコード全体でteamOneteamTwoを確認しても、1人のチームは意味をなさず、スポーツは通常シングルとしてプレーされるため、扱いにくいようです。

これを調整する良い方法は何でしょうか?私は Swift API設計ガイドライン を使用しようとしているので、それを遵守しようとします。たぶん私はバイクシェディングで、teamOneteamTwoは不正確でもいいのですが?

4
Austin Conlon

プレーヤーは、チームを構成する人数に関係なく、プレーヤーです。片側に複数のプレーヤーがいる場合、チームはチームです。名前として「サイド」を使用できますが、ここでは抽象化が欠落していると思います。シングルまたはダブルのスコアリングは同じですが、ゲームプレイとサイドごとのプレーヤー数に若干の違いがあります。これは、ロジックとデータの両方の違いにつながります。継承の素晴らしい例のように聞こえます。

TennisMatch抽象親クラスと2つの具象サブクラス(SinglesMatchとDoublesMatch)が必要です。

これにより、物事をそのまま命名するために必要な分割が得られます。 SinglesMatchには2つのサイドがありますが、サイドごとに1人のプレーヤーのみです。 DoublesMatchには、それぞれ2人のプレーヤーで構成される2つの側面もあります。

抽象化を適切に識別したので、これがキーです。物事に適切な名前を付けることができます。

  • プレーヤー
  • スコア
  • テニスの試合
  • TennisMatchにはスコアがあります
  • SinglesMatchはTennisMatchです
  • SinglesMatchには2つのプレーヤーが2面あります
  • DoublesMatchはTennisMatchです
  • DoublesMatchには2つのサイドに4人のプレイヤーがいます
3
Greg Burghardt

まず第一に、xxxOnexxxTwoを避けることを強くお勧めします。代わりに array を使用してください。これにより、エラーが発生しやすい条件をたくさん使わなくても、適切なプレーヤーとの作業が容易になります。

var players = [Player](); 
...
for player in players {    // for-in loop 
   player.doSomething(); 
}
player[1];                 // access to a specific player

次に、ネーミング自体について説明します。個人としてplayerをもっと見る場合、チームを1人で構成できることに本当に同意しない場合は、participantのようなより中立的な用語を選択することができます。参加者は1人または複数のメンバーを持つことができます。

これは、Participantクラスをサブクラス化することを除外するものではなく、さらに特定の動作またはプロパティが必要な場合は、PlayerおよびTeamがそれから継承するようにします。反対側(ただし、ここではそうではないと思います)で、共通性があまり見られない場合は、ParticipantPlayerによって実装されるプロトコルとして見ることもできます。 Team

1
Christophe

通常、私の提案は公式ルールを確認することです。これらは実際にコード化されるものです。ただし、テニスの場合、ダブルスは少々後付けとして扱われるようです。 「プレーヤー」は一般的に使用され、ダブルスの場合は「プレーヤーまたはチーム」が使用されます。

正確に何を書いているかに応じて、2つのゲームクラスを名前空間に完全に分離したくなるでしょう。

Tennis.Singles.Player

そして

Tennis.Doubles.Team
Tennis.Doubles.Player

私はテニスのルールを完全に理解していないので、2つのバージョンのゲーム間でクラスを再利用できない可能性があるトーナメントルールをあいまいにすることに注意します。

0
Ewan