
25.03.2011, 01:14
|
|
блогер
Регистрация: Feb 2006
Сообщений: 1,474
|
Снова MVC: контроллеры мелких объектов
Допустим, делаю фермоподобную игру.
Уже на не первом проекте замечаю рост неподдерживаемой условной логики в общем для всех мороковок, животных и строений контроллере.
Собственно, понятно, что:
- базовая модель "карта фермы" содержит дочерние модельких мелких объектов (2-5 типов)
(ничего не делает, только помогает в получении всякой информации и рассылает события)
- главный контроллер
а) забирает данные от сервера, наполняет и меняет соответствующим образом "карту фермы"
б) принимает данные от кликов по объектам карты и меняет соответствующим образом модель и ее мелкие объекты
с) считает время созревания/протухания/сбора каждого объекта, изменяя в нужный момент модель
- вьюшка
слушает модель, передает события действий пользователя контроллёру
А вот что не понятно:
как избавить контроллер от слежения за всеми типами всех объектов?
- перенести логику в модель?
не получится:
а) Например при заходе к другу действия от пользователя надо обрабатывать по другому
б) В зависимости, от выбранного инструмента нужно по-разному реагировать на действия пользователя
с) Ну логику для разных типов мы разделим, зато загадим мелкую модель жуткой логикой для разных ситуаций
- запихать во вьюху?
а) приведет к дикому копипасту, т.к. одни и те же дейтсвия можно делать с помощью разных частей интерфейса
б) опять же, загадим вьюху условной логикой для разных ситуаций. А выделить в ней классы-состояния при высоком уровне копипаста (см.пункт а) - нереально.
- наделать по контроллеру на модельку?
идея нравится, но вот как это сделать?, ведь требования такие:
а) контроллер должен считать и помнить что он насчитал для своей модельки;
б) решать какие действия доступны для его модельки;
с) приводить вьюшку в соответствие с возможными действиями (заставлять всякие значки "скликни меня" рисовать)
но при этом он должен быть отвязан от модели, т.к.:
а) нужны разные контроллеры на одну и ту же модель для разных состояний игры - надо по-разному обрабатывать действия пользователя
б) нужен механизм для смены контроллеров всех моделек при смене глобального состояния
с) кто-то должен знать какой контроллер должен быть назначен модели - кто? Будь это моделька или вьюшка - проблем достаточно и в том и в другом случае.
Есть какие-нибудь идеи?
Последний раз редактировалось expl; 25.03.2011 в 01:22.
|