Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Опять MVC - как лучше? (http://www.flasher.ru/forum/showthread.php?t=214735)

ZergMaster 22.03.2018 12:16

По мне, так если у тебя есть набор статических констант - это классический случай, когда по любому их надо прятать в отдельный класс, как-нибудь его тематически-обобщенно обзывая, чтобы места не занимали и беспорядок не наводили.

Appleman 22.03.2018 14:43

ZergMaster, само собой. Так и сделано. Есть пакет data, в котором живёт класс, например, CharacterIDs. Но в него лезут как классы Модели, так и Вью. Мой вопрос, является ли использование общих ID-шников Моделью и Вью нарушением принципа взаимной независимости элементов MVC?

Zebestov 22.03.2018 14:53

Да какая же тут может быть зависимость?! Если все в курсе, какие общие термины используются в приложении, доступ к механизмам они от этого автоматически не получают.

Appleman 22.03.2018 20:33

Zebestov, спасибо. Понял-отстал.

Zebestov 22.03.2018 22:42

Нене, ты не отставай, спрашивай ) я сам поначалу заморачивался по каждому поводу.

Appleman 08.05.2018 01:18

Друзья! В соседней теме обсуждали, как asset-ы для игры загружать. Пока у меня для этого в AssetManager-е есть Dictionary, где хранятся и отдаются по строковым ID BitmapData графики: для главного героя (ГГ), локаций, врагов и т.п. Соответственно, пачки картинок должны загружаться или удаляться в определённые моменты. В частности, картинки для ГГ - при выходе из интерфейса создания своего персонажа, картинки для локации - момент захода в локацию и т.п.

Вопрос №1, кто в MVC командует этим процессом и дёргает паблики Asset-менеджера? Например, текущая локация у меня - это свойство ГГ (экземпляр Character). Если игрок выбирает опцию "сменить локацию" и попадает в другую, в модели персонажа свойству _location присваивается новое значение. Тут же по идее должно отправляться событие, по которому нужно давать отмашку Asset-менеджеру грузить картинки. Вопрос, кто должен ловить это событие: сам Character, Модель, Вью?

Вопрос №2 в продолжение. Если картинки ГГ должны загружаться сразу после создания персонажа (и оставаться в быстром доступе до самого конца игры), то я решил сделать на будущее пакет heroCreation и какой-нибудь примитивный класс, который потом будет реализовывать полноценный процесс создания ГГ для игрока. И вот о чём я задумался. По уму для создания ГГ должна быть своя триада MVC. Значит, кто-то должен её создать. А у меня это сделать некому. Подскажите, как должны выглядеть Модель, Вью и Контроллер самого верхнего уровня? Я так понимаю, в данном вопросе вариантов немного, есть некий канонический вид.

Спасибо.

ZergMaster 08.05.2018 11:59

Цитата:

Сообщение от Appleman (Сообщение 1205137)
Вопрос, кто должен ловить это событие: сам Character, Модель, Вью?

странный вопрос.. событие оно на то и событие, что поймать его могут все, у кого есть экземпляр. А могут не ловить. В том плане, что кому надо, тот и должен. Насколько я понимаю, в данном случае модель чарактера, которую уже слушает вью чарактера.

Цитата:

Сообщение от Appleman (Сообщение 1205137)
Значит, кто-то должен её создать. А у меня это сделать некому.

это как? 0_о :eek:

Appleman 08.05.2018 14:24

Цитата:

Сообщение от ZergMaster (Сообщение 1205145)
странный вопрос.. событие оно на то и событие, что поймать его могут все, у кого есть экземпляр. А могут не ловить. В том плане, что кому надо, тот и должен. Насколько я понимаю, в данном случае модель чарактера, которую уже слушает вью чарактера.

Ну не то чтобы все, а только те, у кого ссылка есть на объект, посылающий это событие. Пораскинув мозгами, склоняюсь к мысли, что отдавать команду грузить картиночки - точно не удел Модели. Так что либо Вью, либо Контроллер.

Кстати, даже до события можно. Если игрок выбирает опцию "сменить локацию", но об этом первым "узнаёт" Вью, потом Контроллер. Возможно, кто-то из них уже может скомандовать asset-менеджеру начинать загрузку с диска?

Цитата:

это как? 0_о :eek:
Это так, что я как начал писать кусочек, связанный непосредственно со сражением, так у меня при запуске программы сразу же и начинается заруба :) В Main написано буквально следующее: new battle.Battle(_view, _hero, _enemy, _location). Это создание контроллера. В нём:

Код AS3:

public function Battle(host: MainView, player:Character, enemy:Character, location:Locations):void
                {
 
                        _host = host;
 
                        var foregroundCharactes: Vector.<Character> = new Vector.<Character>;
                        foregroundCharactes.push(player);
                        foregroundCharactes.push(enemy);
 
                        _model = new BattleModel (foregroundCharactes, location);
                        _view = new BattleView (_model, _host);
                        _host.addChild(_view);
 
                        _view.addEventListener(ViewEventsIDs.MENU_SELECT, menuCommandHandler);                                        // Подписываемся на выбор меню
                        _view.addEventListener(ViewEventsIDs.INSTRUCTIONS_LOADED, ClearInstructionsArray);        // Событие обработки массива состояний
 
                        _model.init();
                }

Теперь вот понимаю, что надо сверху-вниз начинать. Ранее в теме был совет, что каждый из элементов триады MVC сам создаёт своих "дочек". Я и спросил, как должны выглядеть главные Контроллер, Модель и Вью для всего приложения.

Добавлено через 3 часа 29 минут
Скажите, а прочитавшим эту тему от корки до корки ачивку на форуме дают?

Tails 08.05.2018 22:04

Цитата:

Сообщение от Appleman (Сообщение 1205148)
Скажите, а прочитавшим эту тему от корки до корки ачивку на форуме дают?

Можно :)

Appleman 10.05.2018 19:08

В плане оффтопика скажу, что получил искреннее удовольствие от чтения той самой темы. Интересно было наблюдать, как нынешние гуру, каждое слово которых моментально отливается в граните, каких-то 6-8 лет назад мечутся и дискутируют на предмет удачных (а по факту зачастую и неудачных) подходов. В частности, Psycho Tiger или Zebestov, проходящий путь от Контроллера к Модели...

Закончил с лирикой, конкретизирую вопросы. Люди, по всей видимости, тут уже шарахаются, видя много текста от меня. Дам вместо него ссылку. Гляньте плиз вот это сообщение, оно как раз по моей теме. Я правильно понимаю, что то, что советовали для реализации дочерних Контроллеров/Моделей - это "второй вариант"?

У меня в голове как-то плохо умещается взаимодействие элементов триады MVC, если каждый из них САМ создаёт своих дочек. Правильно я последовательность себе представляю:
1. Главный Вью создаёт дочерний Вью. В главном пишем геттер для дочернего. В дочернем пишем сеттер для дочерней Модели.
2. Главная Модель создаёт дочернюю Модель и к ней также геттер.
3. Главный Контроллер из главного Вью забирает по геттеру дочерний Вью, а также из главной Модели ссылку на дочернюю Модель и создаёт дочерний Контроллер, передавая в его конструктор ссылки на дочерние Модель и Вью. Дочернему контроллеру есть на что подписываться (связка "V-C") и чем командовать (связка "C-M").
3. Наконец, дочерний Контроллер, уже имея ссылку на дочернюю Модель, просто устанавливает её для дочернего Вью через сеттер. Дочерний Вью подписывается на дочернюю Модель, "закрываю" последнюю связку "M-V". Всё готово.

Всё верно или я опять перемудрил? И не будет ли косяков, связанных с очерёдностью создания дочерних элементов в таком порядке? И в какой DOC должен быть добавлен дочерний Вью?

И ещё вопрос. Нормально, когда Модель вообще одна, а разные Контроллеры появляются в комплекте с разными Вью по необходимости?


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

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