Думаю, вы на правильном пути, и у вас хорошая интуиция, где это сделать.
Моя общая рекомендация - начать с классов, имеющих четко определенные роли и обязанности. Например, вы говорили о наличии сервера расширения игры и сервера, содержащего экземпляр игры. Я бы лично начал с последнего подхода, потому что это дает возможность логу игры c быть не связанным с сервером.
Я предлагаю перечислить различные компоненты, которые, по вашему мнению, необходимы для вашей игры, и дать им очень четкие роли. Например:
- Сервер отвечает за сохранение основного состояния игры и прием входящих запросов клиента (игрока).
- Игра отвечает за основные игровые логи c.
- Клиент - это пользовательский интерфейс для запуска / запуска / взаимодействия с игрой. Клиент подключается к серверу.
- ... и т. Д.
Я только что сделал несколько описаний выше, но если вы go с помощью того же упражнения вы начните видеть несколько взаимосвязей и понимать, как элементы должны быть связаны.
Я думаю, что очень важно определить каждый с четко разделенными обязанностями и не стирать границы, по крайней мере, на ранних этапах вашего дизайна. Игровой компонент / набор классов, который заботится только о логике игры c, может упростить редизайн. Если вы сделаете Игру и Сервер одним и тем же, то будет сложно перепроектировать и разместить Игру с клиентом, например, если вы позже решите создать одноранговую систему. С другой стороны, если Game logi c полностью инкапсулирован, для Сервера нормально иметь экземпляр Game и передавать функциональные возможности туда и обратно с помощью четко определенных интерфейсов: у Game есть связанный с игрой API а Сервер позаботится о сети и, возможно, о сериализации.
После того, как вы выполнили начальный проход, вы можете обнаружить, что вам нужно немного размыть линии, чтобы быть практичным. Это хорошо. Но сначала постарайтесь противостоять этому побуждению, пока не будете уверены, как будут выглядеть основные компоненты.
Надеюсь, что это поможет!