Цитата:
|
...и ещё вопрос. Я выше жаловался на плохое понимание разницы между "data" и "model".
|
В MVC нет такой категории "data". Данные бегают туда-сюда постоянно. Вью забирает и отображает данные из Модели, но она же выступает иногда поставщиком, как ни крути. Модель отличается от тупого хранилища данных тем, что выполняет так же и их обработку, для чего и обладает Логикой. В некоторых интерпретациях MVC, которые насочиняли бывшие РНР-шники, Модель является аналогом Базы Данных на сервере, а вся логика сосредоточена в Контроллере (аналог РНР-скрипта; соответственно клиент — браузер пользователя — это Вью). Для ActionScript такое деление внутри одного файла(!) бессмысленно. Модель хранит данные и она же с ними работает, это логично. Контроллеры обеспечивают поставку новых данных от Вью (если нужно, то и с сервера), включая управление (действия игрока).
В разных режимах приложения одни и те же действия пользователя должны интерпретироваться по-разному. Яркий пример — нажатия клавиш. Во время игры клавиши со стрелками вверх/вниз могут передвигать игрока по карте, а когда на экране Меню — обеспечивают переход между вариантами; в окне настроек могут менять громкость звука и т.п. Удобно пихать эту интерпретацию в контроллеры: имеется ввиду, что для каждого состояния программы существует свой контроллер, который просто не слушает то что не надо и вызывает правильные методы в Модели в ответ на то, что слушает. А поскольку "состояния" так или иначе завязаны на то, что показывает сейчас Вью — Меню, Инвентарь, Диалог, Настройки, Видеозаставка, Поединок — удобно все их делать отдельными Вью со своими контроллерами. А вот насчет множества Моделей это перебор. Ну, или они могут быть как части одной Модели: ты можешь считать что твой Character это CharacterModel, смысл от этого не очень поменяется, разве что возникнет вопрос "а как быть с CharacterController? Что он должен делать?" )) При разделениях Моделей на множество важно осознавать, насколько они зависимы друг от друга всмысле обмена данными. В режиме поединка тебе постоянно надо иметь данные о персонаже и оппоненте "вместе", да еще и об их аммуниции; а вот глобальное меню игры здесь вроде как совсем не при делах — оно может быть отдельной триадой, так как его данные абсолютно обособлены.