Я поддерживаю сервер для карточной онлайн-игры и, думая о том, чтобы привести его в лучшее состояние, я не смог решить, какая модель объекта подходит для моих нужд.
У меня есть класс Player, который имеет много атрибутов. Первая проблема в том, что класс слишком велик. Вторая проблема заключается в том, что я не знаю, как это сделать. Я перечислю некоторые атрибуты и проблемы с ними.
Некоторые атрибуты очень тесно связаны с игроком: ник, электронная почта, последний логин и т. Д. Они, я полагаю, должны храниться непосредственно в классе игрока и в той же таблице в БД.
Теперь некоторые атрибуты немного сложнее, например, количество денег и золота. Проблема с этим заключается в том, что они исторически хранятся в другой таблице, позже может появиться еще несколько валют и что они ДОЛЖНЫ синхронизироваться в базе данных в своем собственном темпе.
Третья категория атрибутов слабо связана с игроком, например строка состояния, опыт, достижения, статистика и т. Д. Они хранятся в разных таблицах в БД и ДОЛЖНЫ храниться, извлекаться, кэшироваться и синхронизироваться в своем собственном темпе.
Обратите внимание, что одна из больших проблем заключается в том, что нам необходимо реализовать относительно сложные схемы синхронизации баз данных, потому что у нас много онлайн-игроков, и наша игра работает в режиме реального времени, и мы должны максимально снизить нагрузку на БД. .
Мои вопросы:
- Как определить, какие атрибуты хранить в классе игрока, а какие нет? Скажите, опыт, ник, сумма денег?
- Когда у кого-то есть атрибуты, которые можно сгруппировать, например (сила, ловкость, выносливость и т. Д.) И (handItem, headItem, footItem, оружие), когда они должны быть сгруппированы, а когда нет?
- Что делать со сложными схемами синхронизации баз данных? Создать отдельную модель для каждого атрибута, который необходимо синхронизировать независимо, или создать несколько классов DataManager, чтобы разбирать их и работать с ними?
- Что делать с необходимостью для класса иметь несколько разных «представлений данных» для внешних потребителей? Как XML, Json, еще один XML для некоторого внешнего сервиса, удобочитаемая строка и т. Д.
Извините, если мои вопросы фальшивые, я не очень хорош в ООП-дизайне, я скорее специалист по ФП. И мой английский не очень хорош =).