PDA

Volledige versie bekijken : MVC based programmeren


saimen
%Europe/Berlin %535 %2008, 13:51
Beste mensen,
Ik ben bezig met het opzetten van een applicatie met behulp van het MVC-pattern. Het idee snap ik wel redelijk, maar ik kom er technisch niet helemaal uit denk ik.
Ik heb het volgende bedacht. Er is een object waar alle data instaat. Daarnaast heb ik nu een controller class. Hierin zet ik voor alle soorten events een eventlistener, in de handler-functie die hier aan hangt vraag ik op, wie het target is en reageer afhankelijk van het target op een manier op het event. Ik vraag me sowieso af of ik op deze manier in de goede richting denk..? Kan iemand mij wat tips geven zodat ik goed verder op weg kan?
Alvast bedankt!

TheDutch
%Europe/Berlin %754 %2008, 19:06
Aangezien je een beginner bent wil ik je aanraden een MVC framework te gebruiken alvorens je er zelf één gaat proberen te schrijven (lees: MVC toepassen). Mijn voorkeur voor een bestaand framework voor ActionScript 3 gaat uit naar PureMVC (http://puremvc.org/) :).

nrocco
%Europe/Berlin %785 %2008, 19:51
PureMVC inderdaad.
Heeft een stijle leercurve, maar daarna gaat het ontwikkelen zo snel en lekker.
Mocht je hierbij hulp nodig hebben, let me (us) now.

10 tips for working with puremvc:
http://www.websector.de/blog/2007/12/25/10-tips-for-working-with-puremvc/

PureMVC.org en natuurlijk het forum:
http://puremvc.org/ en http://forums.puremvc.org

Goede tutorial en een redelijk skelet aan classes om mee te beginnen
http://hubflanger.com/building-a-flash-site-using-puremvc/

saimen
%Europe/Berlin %816 %2008, 20:35
Thx, hier heb ik echt wat aan. Ik ga er mee aan de gang!

nrocco
%Europe/Berlin %822 %2008, 20:43
Yes.. gotcha bietsj ;) we hebben er weer één bij! Succes!

saimen
%Europe/Berlin %886 %2008, 22:16
hmm...het valt toch allemaal een beetje tegen.
Ik heb nu het volgende in mijn hoofd:
Er wordt ergens op een knop gedruk, er wordt dan een nieuw event aangemaakt bv. "updateText" vervolgens gaat er een view, bijvoorbeeld een textvak reageren op dit event en veranderd zijn waarde.
Is dit een beetje het idee van het MVC-pattern?

theFlashWizard
%Europe/Berlin %038 %2008, 01:55
Nee het is iets complexer. Je hebt dus een knop en een textfield view? Deze krijgen dan bijde mediators. De knop mediator luisterd voor iets van een click event. Dan verstuurd hij een notificatie. De kortste (maar ook meest onflexibele manier dus) is om hier de textfield mediator naar te laten luisteren en dan het textfield aan te passen.

Een langere manier is om een command bij de notificatie uit te laten voeren. Deze command laat dan een proxy wat data inladen. Als de data is ingeladen verstuurd de proxy een notification waarop de textfield mediator reageert. Hij kan dan de text ophalen en vervolgend in zijn textfield zetten.

saimen
%Europe/Berlin %343 %2008, 09:14
ok. Heb het iets beter door nu.
Nu even praktisch: Hoe verstuur ik een eigen notification/event?
Ik probeer nu dit:
dispatchEvent(new Event('updateWinkelwagen'));
en ik laat een object reageren op deze manier:
MC.addEventListener('updateWinkelwagen',function() {trace('EVENT IS AFGEGAAN');});
Maar dit werkt niet.

nrocco
%Europe/Berlin %354 %2008, 09:31
Ik heb een .zip file bijgevoegd.

Ik zou een Class schrijven welke de Events class extend.
Hier voeg je dan je custom events toe.

Als je deze class import in je files kan je zo CustomEvent versturen:
dispatchEvent( new CustomEvent( CustomEvent.UPDATE_WINKEL_WAGEN, "id" ) );
De tweede parameter ("id") is optioneel. In dit geval moet het een string zijn, maar als je in de constructor van de CustomEvent class kijkt lijkt het me duidelijk wat je hier mee kan. Door de CustomEvent class aan te passen zou je meerdere parameters kunnen toevoegen waardoor je objecten/strings/whatever can meegeven met de Event zelf... Mooie bijkomstigheid.

En ontvangen:
ontvangendObject.addEventListener( CustomEvent.UPDATE_WINKEL_WAGEN, updateWinkelWagen );

Het voordeel van werken op deze manier is dat je je eigen gemaakte events netjes in een class hebt zitten, is overzichtelijker EN je geeft events geen naam door bij de ontvangende en versturende kant een string zoals"updateWinkelwagen" te gebruiken. Maar je maakt op deze manier gebruik van static constants. voorkomt typfouten waardoor verstuurde events niet aan koment... bespaard je veel gezeik ;)

Neuro
%Europe/Berlin %614 %2008, 15:44
ok. Heb het iets beter door nu.
Nu even praktisch: Hoe verstuur ik een eigen notification/event?
Ik probeer nu dit:
dispatchEvent(new Event('updateWinkelwagen'));
en ik laat een object reageren op deze manier:
MC.addEventListener('updateWinkelwagen',function() {trace('EVENT IS AFGEGAAN');});
Maar dit werkt niet.

Er is een verschil tussen notifications en events.
Met puremusic gebruik je normaal enkel events om vanuit je viewcomponent je mediator te triggeren

In principe klopt je code als je de dispatcher in een viewcomponent hebt staan en de addEventlistener in zijn mediator, en MC je viewComponent is.
(maar zoals morocco zegt, het is inderdaad beter om een eigen event te schrijven)
Waar staat de code die je toont?

Vanaf de mediator communiseer je intern met notifications

facade.sendNotification(Notifications.MIJN_NOTIFIC ATION_CONST, eventueelmijnBodyObject)

Wat ik dan wel meestal doe is vanuit de mediator rechtstreeks een proxy aanspreken, maar ik denk dat dat niet de bedoeling is ? Als een van de experts ;) dit kan bevestigen of ontkennen?

theFlashWizard
%Europe/Berlin %939 %2008, 23:33
Wat ik dan wel meestal doe is vanuit de mediator rechtstreeks een proxy aanspreken, maar ik denk dat dat niet de bedoeling is ? Als een van de experts dit kan bevestigen of ontkennen?
Je maakt je mediators afhankelijk van proxy's. Dit maakt ze minder flexibel. Dus liever niet natuurlijk :)