Показать сообщение отдельно
Старый 25.03.2011, 02:35
Gaen вне форума Посмотреть профиль Отправить личное сообщение для Gaen Найти все сообщения от Gaen
  № 2  
Ответить с цитированием
Gaen
strange mood
 
Аватар для Gaen

модератор форума
Регистрация: Jul 2004
Адрес: Питер
Сообщений: 1,653
Записей в блоге: 1
Отправить сообщение для Gaen с помощью ICQ Отправить сообщение для Gaen с помощью Skype™
Цитата:
Контроллер должен помнить что он насчитал для своей модельки
Если контроллер это помнит, то зачем тогда модель?

Цитата:
Контроллер должен приводить вьюшку в соответствие с возможными действиями (заставлять всякие значки "скликни меня" рисовать)
Если контроллер меняет вьюшку, то зачем тогда модель?

Цитата:
Контроллер должен быть отвязан от модели
Нужны разные контроллеры на одну и ту же модель для разных состояний игры - надо по-разному обрабатывать действия пользователя
Нужен механизм для смены контроллеров всех моделек при смене глобального состояния
Моя идея: не менять контроллер при смене состояния, вместо этого менять его поведение.

Как устроено:
- Поведение (пачка методов, обрабатывающих действия пользователя) для каждого состояния описывается в отдельном классе, вся пачка классов-поведений имеет общий интерфейс.
- Контроллер содержит ссылку на текущий объект-поведение (композиция)

Как используется поведение:
- Контроллер обращается к методам поведения по ссылке (динамическое связывание)

При смене состояния:
- Контроллер обращается к фабрике поведений, передавая туда новое состояние
- Фабрика получает состояние и отдает соответствующее ему поведение
- Контроллер запоминает полученное поведение как текущее

Скорее всего, поведению потребуется ссылка на модель. Ее можно либо передавать в каждый метод (в таком случае поведение можно вообще сделать статическим классом), либо в конструктор объекта (через фабрику).

А вообще, если реакция морковки зависит только от состояния, выбранного инструмента и ее модели, то зачем тогда плодить кучу одинаковых контроллеров? Можно сделать один контроллер для всех морковок, который хранит их модели в массиве, и тоже реализован по описанной выше схеме. Я бы сделал именно так.
__________________
тонкий тролль, осеянный благодатью


Последний раз редактировалось Gaen; 25.03.2011 в 02:43.