2011-01-23 77 views
3

我有2個類,玩家和遊戲以及一個名爲get_player_games($ player_id)的方法。這個方法屬於哪個類?去哪個班的方法?

我似乎遇到了這個問題,我並不是100%確定該方法應該進入哪一類。它只是一個偏好問題嗎?

謝謝

回答

0

我把它看作:

遊戲

類遊戲存儲有關遊戲的信息。遊戲包括當前的遊戲細節,如分數,玩家(在遊戲中)以及其他細節。 一次可能有一個或多個遊戲。

球員

級的球員存儲有關遊戲的玩家信息。玩家包括玩家的詳細信息,例如姓名,UID,聯繫人和其他詳細信息。

所以,如果你需要一個玩家的當前遊戲列表,你需要有一個遊戲列表和一個列表來存儲玩家。這感覺像一個靜態的方法。

那麼......它去哪兒了?我不會在Game和Player類中說。爲什麼不是一個遊戲課?一個......

  • 引用當前遊戲(和相關球員)
  • 高分圖表
  • 遊戲歷史(誰發揮的時候,多長時間,等...)

所以,對我來說,你需要一個遊戲類,讓你靜態調用有關什麼遊戲進行中,誰在玩,高分列表等信息列表...

+0

你會如何提出在「遊戲」類中關聯玩家和遊戲?如果我們有玩家名單和一系列遊戲,我們如何獲得玩家A的遊戲? – jmort253 2011-01-23 07:05:10

0

這裏有一種想法:一個遊戲可以有一個玩家。一場比賽可以有2名球員。一個遊戲可以有N個玩家。這聽起來不錯嗎?

這個怎麼樣:玩家可以是1場比賽的一部分。玩家可以是2場比賽的一部分。玩家可以成爲N場比賽的一部分。

現在,想想你的應用程序是如何構建的。以上哪一項最適合?答案在很大程度上取決於它是否是遊戲和玩家之間的一對多關係,玩家和遊戲之間的一對多關係。

當然,如果它是多對多的關係,那麼這兩個類可能都需要這種方法。

+0

只要觸及這個答案,你可能想寫兩種方法; get_player_games($ player_id)會進入你的'遊戲'類,get_player_games()會進入你的'player'類,在方法體內使用它自己的id。 – 2011-01-23 06:47:53

2

這是一個典型的交叉參考類情況 - 要完全客觀,它可以在任何一個類中進行。假設一個玩家可以有多個遊戲並且一個遊戲可以與多個玩家相關聯,這真的是一個偏好問題。這就是說,我一直從你首先想到的方式來命名方法,從哲學角度來看它 - get_player_games()聽起來像你對某個特定玩家的遊戲感興趣。玩家是感興趣的主題(基於方法名稱的有限英語語法),遊戲恰好是與此相關的細節。如果您說過get_game_players()或get_games_for_player(),那麼我會說遊戲是感興趣的主題,而不是玩家。顯然,我偏向於你首先選擇的名詞(同樣,從偏見的英語語法角度來看),但是既然你可以爭辯說該方法屬於任何一類,它是唯一可以使用的基礎這樣的情況。

再一次,這是一個任意的決定,但我一直傾向於遵循方法命名的修辭方式向我暗示它屬於哪一類。

+0

+1我真的很喜歡英語語義學的方法。這實際上就是面向對象的編程,用名詞來描述對象和動詞來描述行爲。 – jmort253 2011-01-23 07:06:13

0

假設一個Game對象模型那麼該方法顯然不屬於那裏,因爲任何給定的遊戲都不知道其他遊戲。可以想象,一個對象可以保存玩家參與的所有遊戲的列表。但是你說這個問題的方式表明我們沒有提及一個Player對象,而只是一個玩家ID。因此,Player也不起作用。

聽起來這種方法屬於類MatchHistoryTournamentLadder或類似的東西。