Как красиво разрулить зависимости между объектами?

Пишу классы, которые должны формировать игровые правила определенным образом. И столкнулся со следующей проблемой:

К пример есть игра "В дурака", там есть правила:
- Кол-во игроков (2, 3, 4)
- Командная игра
- Переводной / Подкидной

Однако правило "Командная игра" может сработать только, если пользователь указал правило "Кол-во игроков" = 4.
Тут сразу 2 проблемы.
1) Как наставить data атрибутов, чтобы можно было js скажем скрывать и показывать зависимые правила из выбора определенных значений ?
2) Как эти самые зависимости указывать.

Сейчас у меня есть GameProposalInterface и метод, который реализует класс игры:

public function getRules()
    {
        return [
            new CountPlayersRule([2, 3, 4]),
            new TeamGameRule(),
            new TimeHitRule(),
        ];
    }


Я смотрел в сторону паттерна composite, однако он не очень подходит. Как вариант сделать еще 1 метод, в котором описывать зависимости в массивах, однако, тогда нужно получить имя правила,а это повторно инициализировать объект и делать что то такое:

public function getRulesDependency()
    {
        return [
            (new CountPlayersRule())->getName() => [(new TeamGameRule())->getName() => [4]]
        ];
    }


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

Ну и еще проблема, если нужно сделать сложную зависимость, например:
- Если в правиле А выбрано значение 1, то в правиле Б будет доступно значение 10 и 11
- Если в правиле А выбрано значение 2, то в правиле Б будет доступно значение 12 и 13

Есть у кого-то советы на этот счет ?
  • Вопрос задан
  • 356 просмотров
Пригласить эксперта
Ответы на вопрос 1
DeFacto
@DeFacto
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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