Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   вопрос по MVC в AS3. (http://www.flasher.ru/forum/showthread.php?t=125774)

wer32 01.06.2009 17:56

вопрос по MVC в AS3.
 
В самой концепции говорится что "представление" - это все что является интерфейсом: кнопки, скролы, визуальная информация, звуки и тд.

Делаю аудио плеер, собственно интересует момент в реализации отслеживания позиции проигрываемого звука)

В связи с концепцией MVC само проигрывание звука необходимо производить в классе "представление" или в классе "модель"?

Как мне кажется проигрывать звук должен класс "представление", а вот за параметрами проигрываемого звука (в часности позиций) должен следить класс "модели". И от изменения свойства класса "модель" должен диспатчить событие, которое "представление" должно ловить и менятся под параметр "модели" тоесть графически показывать позицию, например в текстфилде.

Правильно ли рассуждаю?

Зарание спасибо за коментарии :)

s8000_1 01.06.2009 18:07

Правильно.

P.S. Опенсурсный, протестированный, отлично работающий MVC аудио-плеер.

BlooDHounD 01.06.2009 18:11

проигрываем звука должна заниматься модель, так как звук в данном контексте моделью и является.

wizardjedi 01.06.2009 18:12

Но ещё есть такая сущность как контроллер, которая этим по идее и должна заниматься.

wer32 01.06.2009 18:16

брррр стоп три поста три мнения :D

исходники ща глянем поучимся :)

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

если ошибаюсь поправьте.

flash33 01.06.2009 18:27

Проигрывание в модели, контроллер следит за поступающими командами из/в, представление - это кнопки и т.д. - интерфейс

wer32 01.06.2009 18:31

s8000_1
спасибо за ссылку :)

Как и говорили BlooDHounD и flash33 там реализовано проигрывание в модели.

Яски 01.06.2009 19:30

Неужто мнения flash33 и BloodHounD совпали :)

wizardjedi 01.06.2009 22:02

Лучше код приведите, чтоб понятнее было.

Вообще, в функции модели входит только получение/хранение данных. Грубо говоря, модель вернёт объект типа Sound, а контроллер вызовет метод play().

wer32 01.06.2009 22:17

Поначалу так и пробовал. Правда возникла проблемма. Модель возращает объект Sound. начинаю проигрывать. и тут надо отслеживать позицию, проще всего следить за позиций в через SoundChanell. Можно и этот обьект из модели брать.
Собственно сама проблемма. Как отслеживать из модели позицию Sound. Собственно пробовал смотреть позицию в самой модели поидее и обьект один и тот же, но в модели позиция стоит, а в представлении проигрывается, как и положено.
Можно конечно передать через ивент в контролер, а из контролера запомнить позицию. Но это геморой еще тот. Да и как то совсем не упрощает восприятие проги, что в принципе и должна делать MVC.

Cybo 02.06.2009 00:50

Звук и графика - это представление. Модель хранит позицию (текущее время) проигрывания, общее время композиции, громкость, название трека. Представление - цифры нв экране, название песни, индикатор проигрывания и пр. Контроллер - регулятор громкости, след. композиция, стоп/пауза и т.д.

dimarik 02.06.2009 01:51

Вставлю тоже пять копеек. Все нижесказанное - мой бред. Звук есть представлние, которе генерит евенты типа сколько проигралось (композиция поможет сделать SoundView), играется оно или остановлено, слушает модель на предмет play(), stop(), position (SoundEvent.PLAY, SoundEvent.STOP, SoundEvent.CHANGE_POSITION). Контроллер: есть и он, естесственно, диктует модели такие состояния, а также из SoundView узнает её (вьюхи) состояние и сеттит модель определенным образом.

wer32 02.06.2009 15:41

dimarik
Изначально так и думал. Столкнулся с проблеммой как вытянуть из Представления позицию sound.
А что это вы за евенты описали ?? SoundEvent.PLAY. SoundEvent.STOP, SoundEvent.CHANGE_POSITION

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

etc 02.06.2009 18:14

Пользовательские.

Deidara 02.06.2009 18:38

Господа, может перед рассуждением на эту тему стоит задать себе вопрос: А для чего вобще нужен паттерн проэктирования MVC (Model View Controller)?
Попробую ответить, поправьте если ошибаюсь. Самому интерестно стало верно ли понимаю.

Первое и самое главное, это как раз разделение модели (хранение данных), представления (визуализация), и управления.
Отсюда следует что:
модель не должна ничего делать кроме как загружать и хранить песню или ссылку на песню

Представление должно только добавлять на экран элементы плеера и управлять визуализацией касательно них.

Контроллер должен обрабатывать действия пользователя и применять их к песне

Для чего нужно разделение?

Для того, чтобы можно было изменять поведение модели без ущерба для контроллера и представления
Поведение контроллера без ущерба модели и.т.д

Про инкапсуляцию данных молчу

dimarik 02.06.2009 19:05

В общих чертах правильно. О code reuse не упомянули. И скорее изменение представлений никак не повлияет на оставшуюся парочку - контроллер и модель.
А вот изменение модели, тех её свойств, которые отслеживаются вьюхами повлечет за собой изменение последних.

Представлений может быть несколько. В моем рассуждении в данном приложении представлением является зам звук (SoundView), а так же упомянутые Вами элементы плеера. Представления вполне могут "питаться" от одной модели.

Цитата:

модель не должна ничего делать кроме как загружать и хранить песню или ссылку на песню.
Можно переложить ответственность за загрузку на представление. В модели только URL. Так же в модели, повторюсь, есть текущая позиция проигрывания песни, может быть плейлист, уровень громкости, баланс каналов, флаг проигрывается/остановлено и пр. и пр.

wizardjedi 03.06.2009 01:55

2 Deidara, правильно мыслите!

А вообще, жизнь гораздо разнообразнее и порой применение паттернов становиться самоцелью, что не верно. Даже в описании паттернов написано, что не надо использовать их без необходимости. Не исключено, что вашу задачу можно решить без MVC более элегантным способом, а то вон сколько копий поломали :)

wer32 03.06.2009 03:02

Мышление есть отражение подсознания. Сложно сочинять что то новое не имея достаточного багажа знаний :) Да и быстрее выучить уже обсосаные патерны. ИМХО.

dimarik 03.06.2009 11:39

Цитата:

Сообщение от wizardjedi (Сообщение 825368)
2 Deidara, правильно мыслите!

А вообще, жизнь гораздо разнообразнее и порой применение паттернов становиться самоцелью, что не верно. Даже в описании паттернов написано, что не надо использовать их без необходимости. Не исключено, что вашу задачу можно решить без MVC более элегантным способом, а то вон сколько копий поломали :)

Чем сложнее взаимосвязи между объектами, тем сложнее решение задачи построения приложения. Паттерны помогают решить такие задачи быстро и чаще эффективно.

wizardjedi 03.06.2009 16:02

2 dimarik, Я с вами полностью согласен, паттерны для этого и создавались. Но их использование должно быть осознанным, а не целью просто их использовать. MVC отличный паттерн, но только им не ограничивается весь набор решений.


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

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