Способ пойти в каком классе? - PullRequest
3 голосов
/ 23 января 2011

У меня есть 2 класса, игрок и игра и метод get_player_games ($ player_id). К какому классу принадлежит этот метод?

Кажется, я немного столкнулся с этой проблемой, когда я не уверен на 100%, в какой класс следует использовать метод. Это просто вопрос предпочтений?

Спасибо

Ответы [ 4 ]

2 голосов
/ 23 января 2011

Это типичная ситуация с перекрестными ссылками - если быть полностью объективным, она может применяться в любом классе.Это действительно вопрос предпочтения, если предположить, что у игрока может быть несколько игр, а игра может быть связана с несколькими игроками.

Тем не менее, я всегда подходил к этому философски, исходя из того, как вы склонныНазовите метод в первую очередь - get_player_games () звучит так, как будто вы заинтересованы в играх для конкретного игрока.Игрок является предметом интереса (на основе ограниченной грамматики английского имени в названии метода), игры оказались деталями, связанными с этим.Если бы вы сказали get_game_players () или get_games_for_player (), то я бы сказал, что интерес представляют игры, а не игрок.

Очевидно, что меня смещает существительное, которое вы выбрали первым (опять же, с точки зрения предвзятой грамматики английского языка), но, поскольку вы можете утверждать, что метод принадлежит какому-либо классу, это единственно возможная основаиспользовать в таком случае.

Опять же, это несколько произвольное решение, но я всегда был склонен следовать тому, что риторически подсказывает мне метод именования, к какому классу он принадлежит.

0 голосов
/ 23 января 2011

Если предположить, что объект Game моделирует одну игру, то метод явно не относится к ней, поскольку любая конкретная игра не будет знать о других играх. Можно предположить, что объект Player может хранить список всех игр, в которых участвовал игрок. Но то, как вы сформулировали вопрос, говорит о том, что у нас нет ссылки на Player объект, а есть только идентификатор игрока. Следовательно, Player тоже не работает.

Похоже, этот метод будет принадлежать классу с именем MatchHistory или Tournament или Ladder или что-то в этом роде.

0 голосов
/ 23 января 2011

Я вижу это как:

Игра

Класс Game хранит информацию об игре. Игра включает в себя текущие данные игры, такие как счет, игроки (в игре) и другие детали. Может быть одна или несколько игр одновременно.

Игрок

Класс Player хранит информацию об игроке в игре. Проигрыватель включает сведения о проигрывателе, такие как имя, UID, контакт и другие сведения.

Итак, если вам нужен список текущих игр игрока, у вас должен быть список игр и список для хранения игроков. Это похоже на статический метод.

Итак ... Куда это денется? Я бы сказал, ни в классе Game, ни в классе Player. Почему не класс игр? Тот, который ...

  • Ссылки на текущие игры (и связанные с ними игроки)
  • Таблицы рекордов
  • История игр (кто играл, когда, как долго и т. Д ...)

Итак, мне нужен класс Games, который позволял бы вам статически вызывать списки информации, связанной с тем, какие игры выполнялись, кто играет, списки рекордов и т.д.

0 голосов
/ 23 января 2011

Вот один из способов думать об этом: в игре может быть 1 игрок.В игре может быть 2 игрока.В игре может быть N игроков.Звучит хорошо?

Как насчет этого: игрок может участвовать в одной игре.Игрок может быть частью 2 игр.Игрок может быть частью N игр.

Теперь подумайте, как устроено ваше приложение.Какой из вышеперечисленных работает лучше всего?Ответ во многом зависит от того, являются ли это отношения один-ко-многим между играми и игроками, отношения один-ко-многим между игроками и играми.

Конечно, если это отношения много-много, то оба класса могутнужен этот метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...