去哪个班级的方法?

时间:2011-01-23 06:34:26

标签: oop

我有2个类,玩家和游戏以及一个名为get_player_games($ player_id)的方法。这个方法属于哪个类?

我似乎遇到了这个问题,我不能100%确定该方法应该进入哪个类。这只是一个偏好问题吗?

由于

4 个答案:

答案 0 :(得分:2)

这是一种典型的交叉引用情况 - 要完全客观,它可以进入任何一类。这真的是一个偏好问题,假设一个玩家可以有多个游戏,一个游戏可以与多个玩家联系。

也就是说,我总是从你倾向于首先命名方法的方式来理解它 - get_player_games()听起来你对特定玩家的游戏感兴趣。玩家是感兴趣的主题(基于方法名称的有限英语式语法),游戏恰好是与之相关的细节。如果你说过get_game_players()或get_games_for_player(),那么我会说游戏是感兴趣的主题,而不是玩家。

显然,我偏向你首先选择的名词(再次,从有偏见的英语语法的角度来看),但是因为你可以说这个方法属于任何一个类,所以它是唯一可能的基础。一件事。

同样,这有点是一个武断的决定,但我一直倾向于遵循命名修辞方法向我提出的关于它属于哪个类的方法。

答案 1 :(得分:0)

这是一种思考方式:游戏可以有1个玩家。一场比赛可以有2名球员。一个游戏可以有N个玩家。听起来不错吗?

这个怎么样:玩家可以成为1场比赛的一部分。玩家可以参加2场比赛。玩家可以参加N场比赛。

现在,考虑一下您的应用程序是如何构建的。以上哪一种效果最好?答案在很大程度上取决于它是否是游戏与玩家之间的一对多关系,是玩家与游戏之间的一对多关系。

当然,如果它是多对多的关系,那么这两个类都可能需要这种方法。

答案 2 :(得分:0)

我认为:

<强>游戏

Class Game存储有关游戏的信息。 游戏包括当前游戏细节,例如得分,玩家(游戏中)和其他细节。 一次可能有一个或多个游戏。

<强>播放器

Class Player存储有关游戏中玩家的信息。 播放器包含有关播放器的详细信息,例如姓名,UID,联系人和其他详细信息。

因此,如果你需要一个玩家的当前游戏列表,你需要有一个游戏列表和一个存储玩家的列表。这感觉就像一个静态的方法。

那么......它去哪儿了?无论是Game还是Player类,我都会说。为什么不参加游戏课?一个......

  • 参考当前游戏(及相关玩家)
  • 高分榜
  • 游戏历史(曾经玩过,有多久,有多久等等)

所以,对我来说,你需要一个游戏课程,允许你静态调用与正在进行的游戏,正在玩的游戏,高分榜等相关的信息列表......

答案 3 :(得分:0)

假设一个Game对象模拟单个游戏,那么该方法显然不属于那个,因为任何给定的游戏都不会知道其他游戏。可以想象,Player对象可以保留玩家参与的所有游戏的列表。但你表达问题的方式表明我们没有对Player对象的引用,而只是对玩家ID的引用。因此,Player也不起作用。

听起来该方法属于名为MatchHistoryTournamentLadder的类或类似的类。