Форум 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=131588)

Kidd002 24.10.2009 02:03

Ваша реализация MVC
 
Сабж. Кто знаком с MVC, можете описать как вы его реализовывали в своих проектах? Интересует не фреймворки типа pureMVC, а авторские ) разработки.

etc 24.10.2009 15:17

Вложений: 1
Диаграммы рисовать не умею, поэтому красиво не получилось.

ramshteks 24.10.2009 17:13

ыыы) сразу все понятно всем стало))
Если не секрет это что за проект?

etc 24.10.2009 17:17

В Destiny такая схема. Правда там серверов и соединений больше.
Само собой что это просто схема, в реальности контейнеров, вьюверов и контроллеров больше.

Kidd002 24.10.2009 18:03

О! Спасибо, очень интересно.

wvxvw 24.10.2009 18:25

Вот, еще вариант, без схемы, просто пример:
Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<o:DIV
        xmlns:mx="http://www.adobe.com/2006/mxml"
        xmlns:o="http://e4xu.googlecode.com"
        xmlns:t="tests.*"
        width="800" height="600"
        initialized="init()"
        >
        <mx:Script>
                <![CDATA[
                import flash.events.Event;
                import org.wvxvws.mapping.MappingEvent;
                import org.wvxvws.net.AMFService;
                import org.wvxvws.net.ServiceEvent;
 
                private function init():void
                {
                        (cnt0.dispatcher as AMFService).send("getList");
                }
 
                private function handlerA(event:Event):void
                {
                        trace("handlerA", event, event.target);
                        trace((event.target as AMFService).result);
                        trace((event.target as AMFService).fault);
                }
 
                private function handlerB(event:ServiceEvent):void
                {
                        trace("handlerB", event, event.target, event.currentTarget);
                        trace((event.target as AMFService).result);
                        trace((event.target as AMFService).fault);
                }
                ]]>
        </mx:Script>
        <t:TestMap/>
 
        <o:Connector id="cnt0" link="callSomeService">
                <o:Handler type="complete">
                        <mx:Function>handlerA</mx:Function>
                </o:Handler>
        </o:Connector>
 
        <o:Connector id="cnt1" link="callTheService">
                <o:Handler type="fault">
                        <mx:Function>handlerB</mx:Function>
                        <mx:Function>handlerA</mx:Function>
                </o:Handler>
                <o:Handler type="result">
                        <mx:Function>handlerA</mx:Function>
                </o:Handler>
        </o:Connector>
</o:DIV>

Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<o:Map
        xmlns:mx="http://www.adobe.com/2006/mxml"
        xmlns:o="http://e4xu.googlecode.com"
        >
        <o:dispatchers>
                <o:AMFService
                        id="service"
                        baseURL="http://localhost/amfphp/gateway.php"
                        >
                        <o:ServiceMethod
                                id="testMethod"
                                name="getList"
                                >
                                <o:ServiceArguments>
                                        <mx:String>foo</mx:String>
                                        <mx:String>bar</mx:String>
                                </o:ServiceArguments>
                        </o:ServiceMethod>
                </o:AMFService>
        </o:dispatchers>
 
        <o:links>
                <o:Link id="callSomeService" dispatcher="{service}">
                        <mx:String>result</mx:String>
                        <mx:String>complete</mx:String>
                </o:Link>
                <o:Link id="callTheService" dispatcher="{service}">
                        <mx:String>fault</mx:String>
                        <mx:String>complete</mx:String>
                </o:Link>
        </o:links>
</o:Map>

Соответсвующие сорцы тут:
http://code.google.com/p/e4xu/source...wvxvws/mapping

udaaff 24.10.2009 18:34

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

etc 24.10.2009 18:56

Назначение всех элементов очевидно, Controller — контролировать, принимать данные, создавать данные, вьюверы и т. п., Data/DataContainer/DataBase — хранить эти данные, слать события об изменении, View — соответственно отображать эти данные, слать события. Скажем, на этой архитектуре работает http://vkontakte.ru/app1641048_1234202
Плюс ещё пара игрушек, ну и Destiny само собой.

koIIImarik 24.10.2009 19:04

Было бы интересно узнать от автора, почему он не стал пользоваться pureMVC?

Kidd002 24.10.2009 19:07

Потому что я сейчас пользуюсь pureMVC и он мне не нравится.

koIIImarik 24.10.2009 19:16

Чем именно не нравится?

Kidd002 24.10.2009 19:28

Излишней сложностью. Зачем нужно было реализовывать паттерн обсервер, если есть листенеры? Он захламляет проект. Появляется куча разных классов, в которых трудно разобраться другому кодеру. И когда я с ним работаю меня не покидает ощущение какой-то кривизны )

koIIImarik 24.10.2009 19:34

Спасибо за развёрнутый ответ, сейчас читаю инфу по PureMVC и думаю, нужно ли оно мне.

etc 24.10.2009 19:53

Мне кажется, PureMVC популярен потому что на это работает название и его картинка с блок-схемой. «О, круто, MVC! Да ещё Pure. Ну ваще, наверное шыкарная штука, не зря же она так называется. Вау, какая клевая картинка, как все круто нарисовано, WOW!. Ух ты, тут куча умных слов и шаблонов! Ну всё, буду юзать, теперь я тру-флешер!» — рассуждения среднестатистического флешера.

SamFR 24.10.2009 20:14

etc, спасибо за хорошее настроение :)
Мысли среднестатистического флешера переданы очень точно)

Kidd002 24.10.2009 20:48

etc, а ты не можешь сказать как у тебя происходит создание например view-компонента? Родитель диспатчит кастом событие что хочет чилда, контроллер его ловит и создает и чилда, и data, что ему соответствует? Или как?

etc 24.10.2009 20:55

Есть DataContainer, его отображает и слушает некоторый View, который умеет делать детей-вьюшек. Как только в DataContainer попадают новые данные, новая Data, вызывается событие ADDED (по аналогии с моделью DisplayObject), которое всплывает от Data до DataContainer и далее. Этот ADDED ловит View и создает очередную мелкую вьюшку и отдает ей ссылку на эту Data.

Или вопрос о создании основных вьюверов?

Kidd002 24.10.2009 20:58

Нет, понятно, спасибо.

ramshteks 24.10.2009 21:40

Блин, как радует что я не среднестатистический)
etc схема которую ты приводил, это обобщеная схема всего дестени? или только какого то отдельного модуля?

etc 24.10.2009 22:05

Это просто схема связей между элементами различного рода. В реальном приложении контроллеров, структур данных и вьюверов больше, но общая иерархия соответствует схеме. Рисовать ту же схему Destiny я замучаюсь, там одних только различных DataContainer с несколько десятков.

BlooDHounD 27.10.2009 05:12

первый раз увидел нашу картинку так развёрнуто )

dimarik 27.10.2009 10:12

А я как удивился, что Денис начал документацию готовить =)

etc 27.10.2009 11:59

Не начал, не дождетесь :quiet:

BlooDHounD 27.10.2009 16:53

когда я пытался это изобразить, кажется, получилось всего 7 кружочков ( и то, кажется, они были квадратные ).

alexcon314 27.10.2009 17:25

И не пытатесь, тут нужен оо-художник, а не оо-программист. :)

r_r_f_r 28.10.2009 00:14

Цитата:

Сообщение от alexcon314 (Сообщение 861201)
И не пытатесь, тут нужен оо-художник, а не оо-программист. :)

сегодня уже нет :cool:

alexcon314 28.10.2009 03:01

Ну, коли так - больше примеров, тем паче. Когда-то я задавал подобный вопрос (год-полтора назад) с просьбой-предложением показать пример схемы практической реализации паттерна, хоть какого, и вот, дождался же..
ЗЫ. Я знаю об это штуке .. но Денис, по-моему, вдохновился не от нее..:)

dimarik 28.10.2009 10:11

Цитата:

Сообщение от r_r_f_r (Сообщение 861322)

сегодня уже нет :cool:

И много Вы на ней нарисовали? =)

Felicast 28.10.2009 11:03

Цитата:

И много Вы на ней нарисовали? =)
я дак постоянно пользуюсь

dimarik 28.10.2009 11:11

купили?

Felicast 28.10.2009 11:30

я имею ввиду методику (uml), а не конкретную программу (пробовал trial версию)

r_r_f_r 28.10.2009 12:26

Цитата:

Сообщение от dimarik (Сообщение 861383)
И много Вы на ней нарисовали? =)

Я в ней ничего не рисовал:)
Это она мне рисует uml по написанному коду, используется для "написания":) документации и осмотра всей архитектуры если запамятовал.

Цитата:

Сообщение от dimarik (Сообщение 861388)
купили?

ну 200$ не так уж и много ;)

Nemo_c 28.10.2009 14:06

Цитата:

Сообщение от etc (Сообщение 860333)
Мне кажется, PureMVC популярен потому что на это работает название и его картинка с блок-схемой. «О, круто, MVC! Да ещё Pure. Ну ваще, наверное шыкарная штука, не зря же она так называется. Вау, какая клевая картинка, как все круто нарисовано, WOW!. Ух ты, тут куча умных слов и шаблонов! Ну всё, буду юзать, теперь я тру-флешер!» — рассуждения среднестатистического флешера.

Мне нравиться как Рост написал.
Выводы o pureMVC c Flex-конференции UAFPUG во Львове.
«В ходе обсуждения я понял, что часто задаваемый вопрос "где применять PureMVC" некорректен. Не "где", а "кому" применять PureMVC — вот что важнее! Почему: фреймворк PureMVC очень акцентирован идеологически. Его создатель — академик ООП, и это видно по самому фреймворку и документации к нему, даже по названию. Отсюда вывод: PureMVC рекомендуется адептам акдемического подхода. Поклонникам нордического, строгого и безжалостного к слабостям индивидуальных разработчиков ООП. Перфекционистам, которые хотят не только делать проект, но и превращать его в Памятник Программной Архитектуры для Восхищения и Поклонения ценителями и знатоками. Уверен, что лучшие результаты PureMVC даст именно в руках таких людей, которые способны его расширять конкретно для своего проекта, например, типизировав Оповещения. Избавившись от всего нетипизированного и соорудив Идеальный ООП- Аппарат для Этого Конкретного Проекта. Короче говоря: осмысленное превращение абстрактного PutreMVC в конкретное MyPureMVC даст адептам ООП лучший результат и наслаждение. Остальным даст головную боль. И больше тут не о чем спорить.»

Добавлено через 8 минут
От себя. После третей реализации своего MVC, появилось ощущение что изобретаю велосипед. Посмотрел другие MVC реализации. Остановился на PureMVC. Он логичен, и изящен с точки зрения ООП. И чем дальше копаю тем больше нравиться.

Котяра 28.10.2009 14:16

be simple )
Любой паттерн или архитектура, нужен только по мере надобности, mvc ради mvc - зло!
pureMVC ради pureMVC - зло в квадрате!

Nemo_c 28.10.2009 14:18

продолжу. ООП ради ООП это зло. Флеш ради флеша тоже зло, и программирование ради программирования, дальше вы знаете..

Котяра 28.10.2009 14:20

только "жить - ради жизни" хорошо!)))))))
ну и "пиво - ради пива" - тоже))))

Diestro 28.10.2009 16:50

__etc
А как реализован баблинг событий в классах данных?

etc 28.10.2009 16:53

Также, как в DisplayObject-ах. Функционал точно такой же.

Diestro 28.10.2009 16:57

Классы данных наследуются от DisplayObject, а дерево строится через addChild ?

etc 28.10.2009 17:02

Нет, не наследуются, упаси боже. Дерево да, addChild/removeChild, всё также.


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

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