![]() |
|
||||||||||
|
|||||
|
Салют!
Я однажды познакомился с идеей MVC (спасибо Тигре). Тогда все казалось удобным и правильным. Но все мои упражнения в этом направлении ничего хорошего не принесли. Каждый раз модель превращалась в обычный VO, а вся логика делилась межуд видом и контроллером. Метод не самый плохой - мне удавалось сосредоточить данные в одном месте, где их могли подхватить все заинтересованные виды, но от MVC почти ничего не осталось. Не так давно у одного блогера я вычитал утверждение, о том, что если в проекте нельзя вырезать вид и заменить его новым, без каких либо изменений в остальном проекте, тогда архитектура, скажем так, не прошла "MVC-проверку". Это он объяснил на примере игры-шутера: Если у Вас есть грамотно написаный шутер с изометрическим видом (скажем, как у Alien Shooter), тогда просто переписав вид можно сделать из него 3D-шутер (как Wolfenstein 3D). Я пришел к выводу, что теоретически в такую игру можно играть даже без вида - действия игрока передаются в модель через контроллер и в самой модели уже происходит "экшн", а вьюшки нет, значит просто некому это отобразить. После этого я еще раз понял, что мое стремление сделать из моделей просто "говорящие" VO не совсем соответствует парадигме MVC и я в очередной раз решил создать проект с "правильным MVC". Думал-думал и придумал себе проблему: калькулятор то написать в таком стиле не проблема, а тот же шутер - не так просто... Вот Вам ситуация: непрерывная стрельба. Если речь идет о скоростреле, тогда все просто. Кто там успеет посчитать все пули... Модель просто будет генерировать снаряды через определенное количество времени и считать их попадание + урон. А в это время вид будет отображать какое нибудь подергивание оружия да вспишки выстрелов, ну возможно будет еще полоска, имитирующая полет очереди пуль. Попробуй придраться - все выглядит естественно. А теперь меняем свой чудо-автомат на помповое ружье и... Конец халяве! Выстрелы на столько редкие, что так халтурить при их отображении уже не получится ![]() Лично я вижу два варианты реализации, но мне они не очень нравятся... 1) Модель знает сколько должен длится выстрел и ей плевать на вид. А вид получает уведомление о выстреле и начинает анимацию вистрела, отдачи, перезарядки, возвращения в исхоное положение. Все круто, но во время сильной нагрузки плеера (в браузере, кроме игры, запущено еще 4 сериала и две социалки с тонной векторной графики и фильтров) звук этого набора действий проиграется без проблем и, скорее всего, синхронно с моделью , а анимация скорее всего будет хромать. 2) Модель делает выстрел и ждет указаний контроллера для следующего выстрела. А контроллер, в свою очередь, ждет известий от вида, что выстрел благополучно закончен и только тогда командует модели "Пли!". Вариант очень красивый, но тогда получается, что модель очень сильно зависит не только от действий игрока, но и от действий вида. К тому же такой подход порождает множество "висячих макаронин" - дыхание модели разбито на вдох/выдох и без разрешения вида, посланное через контроллер, хоть умри, но дишать нельзя. Хотя нет, чтобы умереть тоже нужно разрешение. О как наворотил... Но и это не самая сложная ситуация. В обоих реализациях либо модель либо вид решают сколько должно длиться конкретное действие. А что, если от их воли ничего не зависит. А что, если такое решение принимает сервер - пойди узнай, когда он ответ пришлет. И это все сгенерировала моя скудная фантазия, а что подкинет реальная практика? Бррр... Короче, если заглянет сюда какой нибуть поклонник MVC, очень прошу укажите мне на мои ошибки в рассуждениях и дайте несколько рекомендаций, в каком направлении стоит двигаться. Ато казалось бы парадигма MVC должна упростить какие нибудь аспекты разработки, но "Мое MVC" только создает проблемы на пустом месте. |
![]() |
Часовой пояс GMT +4, время: 23:32. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|