Я являюсь частью команды, проектирующей сервер для видеоигры типа «военный корабль» для клиентов и серверов (курс университета). У нас есть довольно конкретный (ну, я думаю) дизайн системы, но есть один аспект, который меня беспокоит.«статический класс» или передавать ссылки вокруг?
Базовая схема системы является:
Server [thread] (handles incoming connections)
|
Game [thread] (deals with game events in it's work queue and sending messages to clients)
|--Environment (holds environment variables, deals with collision)
|--Client(s) [thread] (handles incoming messages from client sockets and adds events to the Game's work queue)
|--Ship (holds game data, eg: hit points, fire power, etc)
|--Parser (parses client messages and creates game event objects)
|--GameEvent (event objects held in a queue that can preform appropriate work and send appropriate responses to clients)
Теперь, мой вопрос заключается в том, что клиент и GameEvent (и, вероятно, окружающая среда, как только мы получим к нему) нужна ссылка на объект игры, что они принадлежат к.
Клиенты должны добавить GameEvent в рабочую очередь игры.
Необходимо, чтобы GameEvent нуждался в доступе к другим игровым данным (другим кораблям клиента, окружающей среде).
Есть ли лучший/более традиционный метод вместо того, чтобы эти объекты сохраняли локальную ссылку на свою игру? Как объявить все методы игры статическими? Нам нужно только обрабатывать одну игру за раз, поэтому не было бы ни одного экземпляра игры ...
Я уверен, что существует соглашение для системы с одним центральным объектом, который имеет много вспомогательных объекты, которые должны ссылаться на него.
+1 Инъекционная инъекция - хорошая идея, хотя вы должны называть ее не только ДИ. OP все еще студент, и многие студенты, вероятно, не слышали о таких вещах, как инъекция зависимостей и инверсия контроля. :-P –
Изменено. Благодаря! – Landei