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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 28.04.2009, 02:00
Ромастый вне форума Посмотреть профиль Отправить личное сообщение для Ромастый Найти все сообщения от Ромастый
  № 21  
Ответить с цитированием
Ромастый
 
Аватар для Ромастый

Регистрация: Jan 2004
Адрес: На чердаке.
Сообщений: 1,112
Цитата:
Сообщение от BlooDHounD Посмотреть сообщение
а это не очевидно? модель хранит состояния и оповещает о своих изменениях. это подразумевает, что в любой момент времени я могу узнать состояние. классический пример: инициализация вьювера.
Очевидно, очевидно). Но сначала почему-то прочиталось, будто вью не может узнать о состоянии модели без оповещения со стороны последней. Хотя про вью там вообще ни слова не было. Короткое замыкание под вечер.
__________________
...Тебе страшно? Мне - нет.

Старый 28.04.2009, 04:41
IDimitry вне форума Посмотреть профиль Найти все сообщения от IDimitry
  № 22  
Ответить с цитированием
IDimitry
Banned
[+5 23.05.09]
[+1 23.05.09]

Регистрация: Mar 2009
Сообщений: 93
Вот такой еще вопрос - конечно, больше ООП, но косвенно касается MVC:
можно ли создать вьювер, класс которого является базовым для класса мувика в библиотеке (динамического)? Другими словами, создаем объект-мувик класса А1, базовым для которого является А, который, в свою очередь, должен выступать вьювером в модели: var movie:A = new A1(). Но с другой стороны var viewer_A:A = new A(model, controller). Просто мувики в библиотеке однотипные и принадлежат одному базовому классу, переопределять их не хочется, а поведение идентичное и может зависить от флагов.
Было бы удобно задать var movie:A = new A1(model, controller), но разумеется, что ругается динамический класс. А при попытке var movie:A = A1(); movie.setMC(model, controller) ругается прототип-абстракт из-за недостатка параметров в конструкторе. Думал отправить в конструктор А все 3 параметра и переопределить его конструктор - ругается.
Как-то можно сделать этот "двойственный" конструктор? Или проблемы не в этом, а в неправильности подхода? Просто вкладывать мувик во вьювер не хотелось бы - лишнее звено, да и удобство отображения налицо.

Старый 28.04.2009, 08:18
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 23  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Нельзя базовому присвоить наследника, а наоброт можно. А в вашем случае интерфейсами запахло.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 28.04.2009, 10:34
Cybo вне форума Посмотреть профиль Отправить личное сообщение для Cybo Найти все сообщения от Cybo
  № 24  
Ответить с цитированием
Cybo

Регистрация: Nov 2001
Адрес: Казань
Сообщений: 118
Вот кстати тоже вопрос. Что является правильным: при изменении скорости, расчитывать новые координаты в Модели или в Представлении?

Старый 28.04.2009, 10:36
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 25  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
В модели.

Старый 29.04.2009, 01:39
IDimitry вне форума Посмотреть профиль Найти все сообщения от IDimitry
  № 26  
Ответить с цитированием
IDimitry
Banned
[+5 23.05.09]
[+1 23.05.09]

Регистрация: Mar 2009
Сообщений: 93
Как же все просто получается, когда вникнешь и понимаешь ...
Удивительно, что такое вроде бы однородное понятие как шаблон MVC трактуется так по-разному у разных источниках. Википедия (вместе с Муком) трактуют MVC вот так:
[IMG]http://www.**************/PqvZ020.png[/IMG]
соответственно этому создается триада:
Код AS3:
var model:IModel = new Model();
var controller:IController = new Controller(model);
var view:IView = new View(model, controller);
Могут быть небольшие расхождения, но инициализация триады происходит так и почти везде - в том числе видел на этом форуме, а также парочке ссылок, на которых в основном ссылаются при обсуждении рассматриваемого шаблона.

Однако, прочитывая старые посты тут, пару раз натыкался на замечания небезызвестного __etc (спасибо ему). Поразбирался, "примерял на себя", сделал выводы:
[IMG]http://www.**************/Pqw1360.jpg[/IMG]
прямые стрелки - прямые связи
пунктирные - событийные
(могу ошибиться по поводу событийной связи модель->представление, но вроде как может иметь место, дабы избежать лишнего "пустого" обработчика в контроллере)
Соответственно, построение триады выглядит так:
Код AS3:
var model:IModel = new Model();
var view:IView = new View();
var controller:IController = new Controller(model, view);
или, что на практике удобнее и логичнее, это создавать контроллер с передачей ему доп.параметра(ов), а в нем уже создавать и назначать Представление и Модель.
При таком исполнении в качестве Модели легко может выступать DisplayObject-класс из библиотеки, причем, даже без класса-предка, который бы использовался для управления и выступал бы посредником между классом библиотеки и контроллером: события можно назначить прямо в контроллере.

Сразу отпал вопрос с назначением родителя для класса из библиотеки, а также сильно упростился механизм и ответственности в компонентах триады MVC.

Старый 29.04.2009, 07:53
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 27  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Рисунок у википедии правильный. Может добавляться событийная связь от модели к контроллеру, но не всегда.

Цитата:
При таком исполнении в качестве Модели легко может выступать DisplayObject-класс из библиотеки
Вот тут смысл MVC и пропадает начисто. Вьювер стал моделью.

Старый 29.04.2009, 09:40
Cybo вне форума Посмотреть профиль Отправить личное сообщение для Cybo Найти все сообщения от Cybo
  № 28  
Ответить с цитированием
Cybo

Регистрация: Nov 2001
Адрес: Казань
Сообщений: 118
Код AS3:
var model:IModel = new Model();
var view:IView = new View(model);
var controller:IController = new Controller(model, view);
Может в конструктор Вида надо передавать ссылку на модель? Это нужно для того, чтобы вид (в конструкторе) подписывался на события Модели.

Старый 29.04.2009, 09:47
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 29  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Cybo, необязательно, но можно и передать. В конце концов, ссылку вьюверу на модель может отдать и контроллер.

Старый 29.04.2009, 09:58
Cybo вне форума Посмотреть профиль Отправить личное сообщение для Cybo Найти все сообщения от Cybo
  № 30  
Ответить с цитированием
Cybo

Регистрация: Nov 2001
Адрес: Казань
Сообщений: 118
Наверное да... тогда в дальнейшем можно динамически менять контроллер, тем самым использовать паттерн "стратегия".

Добавлено через 1 минуту
ой. нет. разговор ведь о модели.

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

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

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


 


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


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