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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 29.03.2012, 01:03
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 1  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию Вид меняет модель

Собственно с прошлой темы по мвс, почитал статьи вник немного, уже даже переписал часть некого приложения. Но возник один архитектурный вопрос. У вида всегда есть ссылка на модель, при этом доступно изменение модели и получение данных соотв.
Рассмотрим такую ситуацию.
Есть допустим 5 кнопок, все со своими айдишниками, кнопки создаются в виде и подписываются на клик мыши. По клику мы должны записать в модель айдишник кнопки. У нас есть 2 пути :
1. по парадигме - в контроллере слушать вид, и передавать данные в модель, после чего модель обновит вид.
2. по уму, изменить модель прям из вида, не запуская перекрестный механизм.

Да я понимаю, что мвс - это лишь инструкция к написанию, но никак не шаблон, и интерпретировать можно как угодно, но все же товарищи проффи в этом деле, хочу узнать у вас, вы используете второй подход или ни в коем случае ?!
__________________
Марк Tween


Последний раз редактировалось in4core; 29.03.2012 в 01:08.
Старый 29.03.2012, 01:09
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 2  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Цитата:
Сообщение от in4core Посмотреть сообщение
У нас есть 2 пути :
1. по парадигме - в контроллере слушать вид, и передавать данные в модель, после чего модель обновит вид.
2. по уму, изменить модель прям из вида, не запуская перекрестный механизм.
А если данные нужно будет изменить не в одной Model, а в нескольких, или например еще View изменить параллельно.

Кто этим будет заниматься, изначально ваши кнопки?
__________________
adobe AS3 manual

Старый 29.03.2012, 01:21
anmelegov вне форума Посмотреть профиль Отправить личное сообщение для anmelegov Найти все сообщения от anmelegov
  № 3  
Ответить с цитированием
anmelegov
[+4 07.04.12]
[+1 20.01.12]

Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
вроде контроллер меняет модель и диспатчит об этом виду... *scratch*

Старый 29.03.2012, 01:29
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 4  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Контроллеру не надо ниче диспатчить вьюхе, да и он может не подписывать кнопки. просто используй его как прокси для модели. Вью обрабатывает клик, вызывает метод контроллера, в методе меняется модель. Такой подход полезен тогда, когда надо поменять (или использовать) данные нескольких моделей, при том, что такая логика сама по себе не является бизнес-логикой (зависит от данной реализации представления) и ее присутствие в модели по этому не логично.

Старый 29.03.2012, 01:30
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 5  
Ответить с цитированием
in4core
[+4 06.05.14]
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
anmelegov - это первый путь , точнее парадигма мвс, и я понимаю, что делать можно все что угодно подстраивая парадигму под себя, но вопрос звучал очень конкретно :
Товарищи ПРОФФИ - второй путь нормальная практика или полный [x] ?

Просто в данном примере я не вижу ни ОДНОГО за делать перекрестный запрос, создавать кастом эвент с параметром и т.п. , когда достаточно написать model.buttonId = 1

Добавлено через 7 минут
Цитата:
Контроллеру не надо ниче диспатчить вьюхе
Так ктож об этом говорит? Контрол не диспатчит он принимает события от вьюхи , а вот вьюха диспатчит как раз. И контроллер естественно не подписывает кнопки, что за вздор!
Вью обрабатывает клик - ДА , получается такая схема :

Код AS3:
view - > onCLick - dispatchEvent( new CustomEvent ( NEW_ID , buttonId )
controller - > addEventListener( CustomEvent.NEW_ID , onId ) - > onId - _model.buttonId = 1
model - > dispatchEvent('changeID')
view - > onChangeId ( профит ) 
 
Ужасно!
Ведь проще
view - >  onCLick - _model.buttonID = 1;
view - > onId ( профит )
В неком же случае получается еще страшнее архитекутра, но она обоснована, поскольку контрол держит еще сервер :
Вид установка айди - > контрол получение айди , запись в модель, запуск сервера с этим айди ( да да, айди надо сохранить, а не просто пускануть сервер с ним ) - > получение ответа от сервера , запись в модель - > обновление вида.

А так если такой структуры нет, можно и напрямую видимо менять...
__________________
Марк Tween


Последний раз редактировалось in4core; 29.03.2012 в 01:43.
Старый 29.03.2012, 02:28
Vishapakahr вне форума Посмотреть профиль Отправить личное сообщение для Vishapakahr Найти все сообщения от Vishapakahr
  № 6  
Ответить с цитированием
Vishapakahr

Регистрация: Apr 2009
Адрес: Armenia , Yerevan
Сообщений: 145
Тут поскольку пошло речь об бизнесс логике в контроллере , и еще про то как слышать собитие от вида в нем , кто то подскажет как реализовать последний в puremvc (notifications) ? я сейчас уже постепенно перехожу на Robotlegs и Parsley , но все же интересно . Я всегда всю логику писал в виде , и даже регистрировал и удалял виды и модельи в нем ))
__________________
Urartu is a neoHittite and ProtoArmenian kingdom !!

Старый 29.03.2012, 10:03
BuKT вне форума Посмотреть профиль Отправить личное сообщение для BuKT Найти все сообщения от BuKT
  № 7  
Ответить с цитированием
BuKT
 
Аватар для BuKT

блогер
Регистрация: Dec 2010
Сообщений: 237
Записей в блоге: 5
Я так не делаю потому что в моих приложениях больше одной модели, и некоторые из них - иерархически выстроены.
Таким образом, если мне надо передать рутовую модель по иерархии - я передаю не саму модель, а ограниченную интерфейсом, который даст доступ только к тем данным, которые можно изменять конкретному ребёнку. Если же мне надо передать модель из контроллера новосозданной вьюхе - я тоже передаю не саму модель, но лишь ограниченную интерфейсом like ISomeGetable.
Да, это не обязательно, но в случае возникновения внезапных ошибок (особенно при совместной разработке) время поиска конкретного виновника стремится к нулю.
__________________
Дебаггер не предлагать

Старый 29.03.2012, 10:42
Silicium вне форума Посмотреть профиль Отправить личное сообщение для Silicium Найти все сообщения от Silicium
  № 8  
Ответить с цитированием
Silicium
 
Аватар для Silicium

Регистрация: Sep 2010
Адрес: Ростов-на-Дону
Сообщений: 369
Я вроде не по-арабски пишу...
Цитата:
Так ктож об этом говорит? Контрол не диспатчит он принимает события от вьюхи
прочитайте пост №3, цитирую:
Цитата:
вроде контроллер меняет модель и диспатчит об этом виду... *scratch*
Вот все-таки об этом говорили, я и сказал.
Цитата:
И контроллер естественно не подписывает кнопки, что за вздор!
Вовсе не вздор - это вариант. Не единственно возможный и уж тем более не самый "правильный", но, все же вариант.
А вот по поводу Вашей схемки - так опять же, постом выше я предлагал все несколько переиначить.
Если Вам нужно решить конкретную задачу, аналогией которой является пример с кнопками - то пожалуйста, скрипач контроллер не нужен. Если Вы хотите разобраться, как стоит делать в более общем случае, то я предлагаю такой вариант:
В
Цитата:
ью обрабатывает клик, вызывает метод контроллера, в методе меняется модель.
Нет смысла диспатчить всякий раз 100500 разных кастомных событий, если при этом не предполагается чего-то пушить. Зачем? Вью имеет право знать о контроллере не меньше, чем о модели. При этом задача контроллера взять на себя логику, которой не место в модели. Модель - это не тупо склад данных - это по сути сама игра (если речь идет об игре конечно). представьте себе, что вы консольное приложение пишите: нет никаких вью, контроллеров тоже нет. Все, что Вы напишете - это и будет модель. А уж какое отображение Вы к этому прикрутите - это ужа другой вопрос.

Старый 29.03.2012, 11:52
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 9  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
представьте себе, что вы консольное приложение пишите: нет никаких вью, контроллеров тоже нет. Все, что Вы напишете - это и будет модель
В консольном приложении View - это stdout + stdin. Контроллер - это то, что принимает сигналы о вводе из View и производит действия над моделью. Модель - это структуры данных в оперативной памяти / на диске.
Единственное отличие консольного приложении от AS3-приложения в том, что контроллер вынужден сам запрашивать данные из модели и отправлять их во view. Ну, это в простейшем случае. Можно самостоятельно написать механизм сигналов, который будет из модели отправлять сигналы об изменениях во view
__________________
...вселенская грусть

Старый 29.03.2012, 11:52
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 10  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Цитата:
Сообщение от in4core Посмотреть сообщение
Да я понимаю, что мвс - это лишь инструкция к написанию, но никак не шаблон, и интерпретировать можно как угодно, но все же товарищи проффи в этом деле, хочу узнать у вас, вы используете второй подход или ни в коем случае ?!
Я использую разновидность второго. Но не называю его MVC - там контроллера вообще не остается. У меня всевозможные "действия" (action) тоже являются частью модели на разных уровнях, так же, как и данные. Например, кнопка работает с действием (которое может быть доступно и вызывается на клик, или недоступно). Более того, публичного типа "кнопка" у меня не существует. Все функции, создающие стандартные "кнопки" получают на вход действие и возвращают DisplayObject. Никаких "конкретных действий" и наследников ради них! Действяи с несколькими "исходными" моделями - это action, который выполняет необходимые действия. Вся привязка отображения (к текстам, к ID, к картинкам) - через привязку к моделям. Возможно - через несколько трансформеров/адаптеров (полезно реактивное программирование).

Во этом варианте при грамотной реализации возникает куча плюсов - много highly reusable компонентов UI (они привязываются к совершенно абстрактным моделям), "декларативное" описание программы (вместо обработчика onClick ... есть действие doSomething привязанное к кнопке), при нормальной реактивной библиотеке - простота композиции "сложных" состояний UI. Ну и избавление от лишней сущности "контроллер" конечно же

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

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

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


 


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


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