Инкапсулируйте данные настроек и поведения по крайней мере в один объект (т. Е. Settings
).В зависимости от того, как устроена ваша система, она становится частью композиции других объектов (например, Player
, Weapon
и т. Д.), Возможно, посредством внедрения зависимостей или ссылки из некоторого глобального контекста.Settings
отвечает за проверку соответствия между клиентом и сервером (например, Settings.validateClientServerSettingsMatch()
).С точки зрения извлечения отдельных настроек, два возможных подхода - явный или неявный.
Явный
Ваш Settings
объект или, возможно, другие объекты, составляющие его композицию, имеют методы для каждого управляемого параметра.Так что это может быть что-то вроде Settings.getPlayerSettings().getSomeSetting()
или 'Settings.getSomePlayerSetting () `.Как вложенность действительно зависит от вашей системы.У каждого из них есть преимущество, заключающееся в том, что он четко определяет, какие настройки доступны для разработки клиента, и предлагает проверку типов времени компиляции, если вы используете такой язык, как Java.Компромисс должен изменить объект каждый раз, когда новая настройка вступает в игру.
Неявный
У него просто есть универсальный метод в объекте Settings
- Settings.getSetting(settingName)
.Это позволяет очень легко добавлять настройки за счет какой-либо полезной проверки типов, если только вы не делаете что-то самостоятельно, используя некоторую разновидность мета-магии на языке, таком как Python или Ruby, или операторы больших регистров в Java.