2016-10-18 6 views
0

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

  1. класс игры
    1. класс GameContext
      1. класс Window
        1. класс GameContext
      2. класс EventManager
        1. класс GameContext
      3. класс StateManager
        1. класс GameContext

Я использую это, так как я иногда нужно получить доступ, например, окна из EventManager , В конце концов, я всегда теряю его. Есть ли лучший способ для чего-то подобного, который позволяет избежать круговых зависимостей? И если не так, как вы думаете, когда вам приходится иметь дело с ними? Я думал, что понял их, но явно нет.

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

Чтобы действительно показать, что я имею в виду, вы можете посмотреть THIS, мой последний неудачный попыток. Проблема, с которой я сталкиваюсь с этой текущей структурой, похоже, связана с зависимостью между EventManager и GameStateManager, поскольку в EventManager я получаю сообщение об ошибке неопределенности на GameStateID.

+0

Я думаю, вам нужно попытаться выяснить, почему * вам нужно «получить доступ к окну из EventManager. Что такое работа EventManager? Зачем для этого нужно окно? –

+0

@ ZongZhengLi Да, я думаю, он тоже здесь. Хотя в настоящее время это слишком широкое/неясное ИМО. –

+0

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

ответ

0

мне удалось выяснить мою проблему, и это было больше в пути, как я думал об этом, я думал, что я хотел структуру, как это:

  1. класс игры
    1. класс GameContext
      1. класс Window
        1. класс GameContext
      2. класс EventManager
        1. класс GameContext

Но то, что я на самом деле хотел было:

  1. класс Game
    1. класс Window
    2. класс EventManager
    3. класс GameContext

Где каждый каждый класс кроме GameContext содержит указатель на GameContext. Также одна из моих проблем заключалась в моем понимании форвардной декларации, я не понимал их и не смешивал и распространял их повсюду, потому что думал, что это волшебство.

+0

Обычно эти проблемы возникают, когда вы создаете классы без состояния или просто используете их как пакет функций, вы можете посмотреть эту статью: http://steve-yegge.blogspot.com.br/2006/03/execution -in-kingdom-of-nouns.html –

+0

Что значит «состояние»? –

+0

Если все функции в классе можно извлечь и работать как свободные функции, то ваш класс не имеет состояния, и он не должен быть классом вообще. Обычный пример, который вы увидите в Интернете, - это класс «Formatter», который будет содержать функцию для форматирования чего-либо. –

Смежные вопросы