nepster-web
@nepster-web

Как лучше взаимодействовать с классами и базой данных ?

Делаю игровой портал и у меня возникли некоторые вопросы, что бы максимально удобно и правильно организовать работу с играми.

Тоесть, к пример у нас есть несколько игр, и мне нужно организовать следующий вещи:
- создание заявки для игры
- статистику игры
- и тп.

Итак первое, что я сделал это общую таблицу всех игр.
'game_id'     => 'int(11) unsigned NOT NULL AUTO_INCREMENT',
            'name'        => 'varchar(200) NOT NULL',
            'alias'       => 'varchar(200) NOT NULL unique',
            'logo'        => 'varchar(200)',
            'status'      => 'tinyint(1) NOT NULL DEFAULT 0',
            'sort'        => 'tinyint(4) NOT NULL DEFAULT 0',
            
            'description' => 'text',
            'rules'       => 'text',
            
            'category'    => 'int(11) unsigned DEFAULT 0',          
                    
            'count_players_in_game'  => 'int(11) NOT NULL DEFAULT 0',
            'count_players_play'     => 'int(11) NOT NULL DEFAULT 0',
            'count_players_waiting'  => 'int(11) NOT NULL DEFAULT 0',


Таблица заявок для игр
Тоесть пользователи создают заявки по желаемым правилам (например играть в дурака переводного, колодой из 52 карт, на ход отводить 30 секунд и тп.)
'proposal_id'   int(11) unsigned NOT NULL AUTO_INCREMENT,
            'game_id'       int(11) unsigned NOT NULL DEFAULT '0',
            'date_start'    datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
            'date_end'      datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
            'status'        tinyint(1) NOT NULL DEFAULT '0',
            'money'         tinyint(1) NOT NULL DEFAULT '0',
            'bank'          decimal(12,5) NOT NULL DEFAULT '0.00000',
            'rules'         text NOT NULL,
            'hash'          varchar(100) DEFAULT NULL,
            'token'         varchar(64) NOT NULL,



Таблица пользователей, которые в ожидании
тоесть если создана заявка, к ней могут подключаться пользователи (исходя из правила кол-во игроков)
'waiting_id'    int(11) unsigned NOT NULL AUTO_INCREMENT,
            'proposal_id'   int(11) unsigned NOT NULL,
            'user_id'       int(11) unsigned NOT NULL,
            'sort'          tinyint(1) NOT NULL DEFAULT '0',
            'root'          tinyint(1) NOT NULL DEFAULT '0',
            'hash'          varchar(100) DEFAULT NULL,


Теперь у меня возник ряд вопросов, как лучше всего организовать структуру работы с играми таким образом, что бы в дальнейшем не было никаких проблем.

Вопрос 1. Как подружить базу и классы игр?
Для каждой игры у нас есть класс.
К примеру есть игра Дурак, у нас есть специальный класс Durak.php, который описывает технические моменты игры, такие как:
- Правила игры (доступные правила и варианты выбора)
- Если ли возможность играть с компьютером (всякие там прокси для подключения бота и тп.)
- всякое конфигурационные штуки и тп.

Теперь у нас в таблице есть поле alias, если в этом поле хранить к примеру значение "Durak" и при работе с игрой обращаться к классу исходя из alias в таблице. Будет ли это правильным решением ?


Ну например, пользователь заходит на страницу игры Durak, я беру из поля alias значение и на основе его подключаю класс игры, забираю от туда конфиг правил и генерирую страницу для пользователя с правилами этой игры.

Вопрос 2. Как не упустить расширяемость?
К примеру следующим этапом будет добавить игры со столами. Тоесть разница в том, что заявки создает пользователь по желаемым правилам, а к столу присоединяются и правила у нас статичны.
  • Вопрос задан
  • 2404 просмотра
Решения вопроса 2
HaJIuBauKa
@HaJIuBauKa
Почитайте про ORM - Object Relation Mapping.
И еще почитайте про PHP-framework, в частности про Laravel.
Думаю через месяц изучения, многое встанет на свои места.
Ответ написан
@Misha7
Проектируйте классы. Проектируйте. Проектируйте. И ещё раз проектируйте. Делайте их максимально гибкими, чтобы легко можно было дополнять код, и это не приводило к "эффекту домино".
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы