Диаграмма классов: Создать дополнительный класс для концентрации информации из существующей системы? - PullRequest
1 голос
/ 18 февраля 2011

Я не знаю, какие уроки я мог бы адаптировать к существующей системе, которая представляет собой онлайн-видеоигру.Вот чего я хочу достичь:

  • Получить серию настроек из объектов на сервере.
  • Прослушивание подключения клиентов.
  • Для каждого клиента установите флажокчто настройки на клиенте соответствуют настройкам на сервере.
  • Если настройки не соответствуют (что-то подделано), либо отключите клиент или измените их настройки.

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

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

1 Ответ

1 голос
/ 18 февраля 2011

Инкапсулируйте данные настроек и поведения по крайней мере в один объект (т. Е. Settings).В зависимости от того, как устроена ваша система, она становится частью композиции других объектов (например, Player, Weapon и т. Д.), Возможно, посредством внедрения зависимостей или ссылки из некоторого глобального контекста.Settings отвечает за проверку соответствия между клиентом и сервером (например, Settings.validateClientServerSettingsMatch()).С точки зрения извлечения отдельных настроек, два возможных подхода - явный или неявный.

Явный

Ваш Settings объект или, возможно, другие объекты, составляющие его композицию, имеют методы для каждого управляемого параметра.Так что это может быть что-то вроде Settings.getPlayerSettings().getSomeSetting() или 'Settings.getSomePlayerSetting () `.Как вложенность действительно зависит от вашей системы.У каждого из них есть преимущество, заключающееся в том, что он четко определяет, какие настройки доступны для разработки клиента, и предлагает проверку типов времени компиляции, если вы используете такой язык, как Java.Компромисс должен изменить объект каждый раз, когда новая настройка вступает в игру.

Неявный

У него просто есть универсальный метод в объекте Settings - Settings.getSetting(settingName).Это позволяет очень легко добавлять настройки за счет какой-либо полезной проверки типов, если только вы не делаете что-то самостоятельно, используя некоторую разновидность мета-магии на языке, таком как Python или Ruby, или операторы больших регистров в Java.

...