Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 30.09.2013, 17:29
elder_Nosferatu вне форума Посмотреть профиль Отправить личное сообщение для elder_Nosferatu Найти все сообщения от elder_Nosferatu
  № 1  
Ответить с цитированием
elder_Nosferatu
 
Аватар для elder_Nosferatu

Регистрация: Nov 2010
Адрес: 48° 55'N 24° 42'E GMT +2:00
Сообщений: 399
Записей в блоге: 1
Question MVC: грамотная архитектура проекта

Салют!
Я однажды познакомился с идеей MVC (спасибо Тигре). Тогда все казалось удобным и правильным. Но все мои упражнения в этом направлении ничего хорошего не принесли. Каждый раз модель превращалась в обычный VO, а вся логика делилась межуд видом и контроллером. Метод не самый плохой - мне удавалось сосредоточить данные в одном месте, где их могли подхватить все заинтересованные виды, но от MVC почти ничего не осталось.

Не так давно у одного блогера я вычитал утверждение, о том, что если в проекте нельзя вырезать вид и заменить его новым, без каких либо изменений в остальном проекте, тогда архитектура, скажем так, не прошла "MVC-проверку". Это он объяснил на примере игры-шутера: Если у Вас есть грамотно написаный шутер с изометрическим видом (скажем, как у Alien Shooter), тогда просто переписав вид можно сделать из него 3D-шутер (как Wolfenstein 3D). Я пришел к выводу, что теоретически в такую игру можно играть даже без вида - действия игрока передаются в модель через контроллер и в самой модели уже происходит "экшн", а вьюшки нет, значит просто некому это отобразить.

После этого я еще раз понял, что мое стремление сделать из моделей просто "говорящие" VO не совсем соответствует парадигме MVC и я в очередной раз решил создать проект с "правильным MVC". Думал-думал и придумал себе проблему: калькулятор то написать в таком стиле не проблема, а тот же шутер - не так просто...

Вот Вам ситуация: непрерывная стрельба. Если речь идет о скоростреле, тогда все просто. Кто там успеет посчитать все пули... Модель просто будет генерировать снаряды через определенное количество времени и считать их попадание + урон. А в это время вид будет отображать какое нибудь подергивание оружия да вспишки выстрелов, ну возможно будет еще полоска, имитирующая полет очереди пуль. Попробуй придраться - все выглядит естественно. А теперь меняем свой чудо-автомат на помповое ружье и... Конец халяве! Выстрелы на столько редкие, что так халтурить при их отображении уже не получится
Лично я вижу два варианты реализации, но мне они не очень нравятся...
1) Модель знает сколько должен длится выстрел и ей плевать на вид. А вид получает уведомление о выстреле и начинает анимацию вистрела, отдачи, перезарядки, возвращения в исхоное положение. Все круто, но во время сильной нагрузки плеера (в браузере, кроме игры, запущено еще 4 сериала и две социалки с тонной векторной графики и фильтров) звук этого набора действий проиграется без проблем и, скорее всего, синхронно с моделью , а анимация скорее всего будет хромать.
2) Модель делает выстрел и ждет указаний контроллера для следующего выстрела. А контроллер, в свою очередь, ждет известий от вида, что выстрел благополучно закончен и только тогда командует модели "Пли!". Вариант очень красивый, но тогда получается, что модель очень сильно зависит не только от действий игрока, но и от действий вида. К тому же такой подход порождает множество "висячих макаронин" - дыхание модели разбито на вдох/выдох и без разрешения вида, посланное через контроллер, хоть умри, но дишать нельзя. Хотя нет, чтобы умереть тоже нужно разрешение.

О как наворотил... Но и это не самая сложная ситуация. В обоих реализациях либо модель либо вид решают сколько должно длиться конкретное действие. А что, если от их воли ничего не зависит. А что, если такое решение принимает сервер - пойди узнай, когда он ответ пришлет. И это все сгенерировала моя скудная фантазия, а что подкинет реальная практика? Бррр...

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

Создать новую тему   Часовой пояс GMT +4, время: 23:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 23:32.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.