Цитата:
|
Контроллер должен помнить что он насчитал для своей модельки
|
Если контроллер это помнит, то зачем тогда модель?
Цитата:
|
Контроллер должен приводить вьюшку в соответствие с возможными действиями (заставлять всякие значки "скликни меня" рисовать)
|
Если контроллер меняет вьюшку, то зачем тогда модель?
Цитата:
Контроллер должен быть отвязан от модели
Нужны разные контроллеры на одну и ту же модель для разных состояний игры - надо по-разному обрабатывать действия пользователя
Нужен механизм для смены контроллеров всех моделек при смене глобального состояния
|
Моя идея: не менять контроллер при смене состояния, вместо этого менять его поведение.
Как устроено:
- Поведение (пачка методов, обрабатывающих действия пользователя) для каждого состояния описывается в отдельном классе, вся пачка классов-поведений имеет общий интерфейс.
- Контроллер содержит ссылку на текущий объект-поведение (композиция)
Как используется поведение:
- Контроллер обращается к методам поведения по ссылке (динамическое связывание)
При смене состояния:
- Контроллер обращается к фабрике поведений, передавая туда новое состояние
- Фабрика получает состояние и отдает соответствующее ему поведение
- Контроллер запоминает полученное поведение как текущее
Скорее всего, поведению потребуется ссылка на модель. Ее можно либо передавать в каждый метод (в таком случае поведение можно вообще сделать статическим классом), либо в конструктор объекта (через фабрику).
А вообще, если реакция морковки зависит только от состояния, выбранного инструмента и ее модели, то зачем тогда плодить кучу одинаковых контроллеров? Можно сделать один контроллер для всех морковок, который хранит их модели в массиве, и тоже реализован по описанной выше схеме. Я бы сделал именно так.