«Правильный» ответ с точки зрения разработки программного обеспечения/архитектуры заключается в том, чтобы передавать определенные ресурсы, которые вам нужны, в качестве параметров в ваши методы. Это дает много преимуществ, возможно, самым большим из которых является то, что он отделяет различные части вашего кода, позволяя использовать их независимо друг от друга.
Чтобы дать вам пример: у вас может быть ваша игра. Но тогда вы, возможно, захотите взять тот же самый код и сделать редактор, или модульные тесты, или любой другой сумасшедший инструмент. Во многих из этих случаев у вас может даже не быть класса Game
. (Чтобы привести вам конкретный пример, это мое видео показывает вам два очень разных способа запуска одного и того же игрового кода — это было бы невозможно без надлежащего разделения.)
(Исходя из этого, вам, вероятно, следует передавать более конкретные вещи, чем класс, производный от Game
.)
Вы можете пойти еще дальше, если у вас достаточно открытые требования к версиям/зависимости, и обойти IServiceProvider
(например, это то, что XNA передает конструктору ContentManager
). Я провел подробный анализ того, почему вы можете сделать это в этом ответе.
ОДНАКО
Вы не пишете библиотеку, которая будет использоваться третьими лицами. Вы пишете игру. Единственными людьми, которые будут использовать ваш код, является ваша собственная команда, и у вас есть доступ к исходному коду, и вы можете свободно изменять его.
Это означает, что вы можете срезать путь.
На практике обычно можно получить статический экземпляр вашего игрового класса или (и это мой предпочтительный метод, когда я собираю что-то вместе) статические свойства вашего игрового класса. А в XNA вы знаете, что на практике у вас будет только один экземпляр игрового класса.
Во-первых, это легко и быстро сделать. И также быстро и легко вернуться позже и переключиться на «правильный» путь. Пока вы к этому готовы. Здесь особенно полезны хороший контроль версий и использование «Найти все ссылки» в Visual Studio.
По сути: до тех пор, пока вы понимаете, что идете по более короткому пути, почему вы идете по нему и каков "правильный" путь, тогда можно пойти по этому пути.
person
Andrew Russell
schedule
02.08.2012