私は、プレーヤーとゲームの2つのクラスと、get_player_games($ player_id)というメソッドを持っています。このメソッドはどのクラスに属していますか?クラスに入る方法は?
私はこの問題に少しぶち当たっているようですが、私はどこのクラスがメソッドに入るべきかを100%確信していません。それは好みの問題ですか?ゲームは1人のプレイヤーを持つことができます。
おかげ
私は、プレーヤーとゲームの2つのクラスと、get_player_games($ player_id)というメソッドを持っています。このメソッドはどのクラスに属していますか?クラスに入る方法は?
私はこの問題に少しぶち当たっているようですが、私はどこのクラスがメソッドに入るべきかを100%確信していません。それは好みの問題ですか?ゲームは1人のプレイヤーを持つことができます。
おかげ
私はとしてそれを参照してください。
ゲーム
クラスのゲームは、ゲームに関する情報を格納します。 ゲームには、スコア、プレイヤー(ゲーム内)などの現在のゲームの詳細が含まれます。 一度に複数のゲームが存在することがあります。
プレーヤー
クラスプレイヤーはゲーム内のプレイヤーに関する情報を格納します。 プレーヤーには、名前、UID、連絡先、その他の詳細など、プレーヤーに関する詳細が含まれています。
現在のプレイヤーのリストが必要な場合は、ゲームのリストとプレイヤーを保存するリストが必要です。これは静的メソッドのように感じます。
だからどこに行くのですか?私はGameクラスでもPlayerクラスでも言いません。なぜゲームクラスではないのですか? 1つは...
だから、私には(とき、どのくらい、等...、果たしてきました)
は、ここでそれを考えるための一つの方法です。ゲームは2人のプレーヤーを持つことができます。ゲームはN人のプレイヤーを持つことができます。それは良いと思いますか?
これについてはいかがですか:プレーヤーは1ゲームに参加できます。プレーヤーは2つのゲームの一部になることができます。プレイヤーはN個のゲームに参加することができます。
ここで、アプリケーションのアーキテクチャーについて考えてみましょう。上記のうちどれが一番効果的ですか?その答えは、ゲームとプレイヤーの1対多の関係、プレイヤーとゲームの1対多の関係かどうかによって大きく異なります。
もちろん、多対多リレーションシップの場合、両方のクラスにそのメソッドが必要な場合があります。
この回答に触れるだけで、2つの方法を書くことができます。あなたの 'games'クラスに入るget_player_games($ player_id)と、メソッドボディ内で独自のidを使用する 'player'クラスに入るget_player_games() –
これは一般的な相互参照の種類の状況です。完全に客観的であればどちらのクラスにも入ることができます。それは、プレイヤーが複数のゲームを持つことができ、複数のプレイヤーにゲームを関連付けることができると仮定すると、本当に優先事項です。
私はいつもあなたが最初にメソッドの名前をつける方法から哲学的にアプローチしました。get_player_games()は特定のプレーヤーのゲームに興味があるように聞こえます。プレイヤーは興味の対象です(メソッド名の限定された英文スタイルの文法に基づいています)、ゲームはそれに関連した細部になりました。あなたがget_game_players()かget_games_for_player()と言っていたなら、ゲームはプレイヤーではなく関心対象です。
明らかに、あなたが最初に選んだ名詞に偏っていますが(偏向された英語の文法の観点から)、どちらのクラスにもメソッドが含まれていると主張できるので、そのような場合。
また、それはやや恣意的な決定ですが、私はいつも修辞的に命名された方法がそれが属するクラスについて私に示唆するものに従う傾向があります。
+1私は英語の意味論のアプローチが本当に好きです。これは、オブジェクト指向プログラミングが実際に何をしているのか、オブジェクトと動詞を記述してその動作を記述するための名詞を使用しています。 – jmort253
Game
オブジェクトモデルあるゲームが他のゲームの知識を持たないため、このメソッドは明らかにそこに属していません。 Player
オブジェクトが、プレイヤーが参加したすべてのゲームのリストを保持できると考えられます。しかし、あなたが質問を表現したやり方は、私たちにPlayer
オブジェクトへの参照ではなく、プレイヤーIDへの参照があることを示唆しています。したがって、Player
も機能しません。
このメソッドは、MatchHistory
またはTournament
またはLadder
などのクラスに属しているようです。
"ゲーム"クラスのプレーヤーとゲームの関連付けをどのように提案しますか?プレーヤーのリストとゲームのリストがある場合、プレーヤーAのゲームはどのように入手できますか? – jmort253
偉大な、それは理にかなっています。どうもありがとう。 – Scott
彼らがメモリだけで生きていて、何らかの形で相互参照ができない場合を除き、何らかのデータベースがあると仮定します。プレイヤーAがゲーム1、4、15、25のディテールである場合、「プレイヤーのゲームのプレイID =%PlayerA%」を選択してください。 –