Показать сообщение отдельно
Старый 27.02.2018, 17:41
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 45  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 483
Други! Сидел, читал с интересом дискуссию профи, а пока созрел ещё вопрос по MVC. В моём проекте (по-прежнему, это игра на механике текстового квеста) всё взаимодействие с пользователем строится через последовательно выводимые ему текста и изображения (всякие шкалы и портреты пока не в счёт). Сейчас это работает так: Модель, делая расчёты, набивает в массив инструкции. Каждый элемент - экземпляр класса-наследника ViewInstruction. Когда посылается событие на отработку этих инструкций, Вью начинает его разбирать, вынимая и анализируя каждый элемент массива вот таким образом:

Код AS3:
private function parseStateArrayBlock(event: Event) : void 
		{
			if (!_stateArray.length) dispatchEvent(new Event(STATE_ARRAY_PROCESSED));
			else
			{
				var stateArrayBlock: * = _stateArray.shift();
 
				if (stateArrayBlock is MainTextAreaInstruction)
				{
					// Здесь инструкции на вывод текста в дочерний компонент _mainTextArea
					dispatchEvent(new Event(PARSE_STATE_ARRAY_BLOCK));
					return;
				}
				else if (stateArrayBlock is BackInstruction)
				{
					// Здесь инструкции на вывод арта в слой _layerBack
					dispatchEvent(new Event(PARSE_STATE_ARRAY_BLOCK));
					return;
				}
Уже вижу сам, что подход хреновый. В главной Вью получается мясо из деталей этих инструкций. Хочу реализовать что-то типа паттерна GoF "Стратегия", т.е. реализовать в каждой из инструкций метод типа execute(), чтобы Вьюха, "достав" из массива очередную инструкцию, не разбиралась в нюансах, а просто запускала её. Плюс такой подход позволит добавлять новые возможные инструкции. Но тут возникает вопрос, на который я хотел бы получить мнения знатоков.

Чтобы быть выполненными, экземплярам классов-инструкций требуются на входе какие-то элементы самой главной Вью. Например, инструкция на обновление текста должна получить ссылку на экземпляр MainTextArea и доступ к её пабликам. А инструкции на вывод арта никак не обойтись без ссылки на слой, куда этот арт нужно выводить, плюс какие-то координаты могут потребоваться, которые хранятся в главной Вью. Навскидку, можно было бы запускать из главной вью вот так:

Код AS3:
_currentInstruction.execute(this);
И ваще не париться Но смущает многократно услышанные здесь от компетентных людей рекомендации о недопустимости передачи ссылок на родительские объекты детям и т.п. Собственно, просьба прокомментировать. Спасибо.
__________________
Не сломано - не чини!