[AS3] Structuur van applicatie in AIR (events, etc)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste mensen, ik ga een desktop-applicatie in Adobe Air maken die zoveel mogelijk OOP is. Nu heb ik een aantal vragen met betrekking tot "Events".

Stel je hebt een klasse "User" die een login functie heeft, dan zou je dit willen doen:
code:
1
2
3
4
5
6
7
8
class toepassing {
  public function toepassing() {
    U = new User();
    if(U.Login(username, password)) {
    //doeiets
    }
  }
}

Maar dat kan niet omdat Login geen waarde kan returnen, omdat data van een server ophalen een asynchrone handeling is.

De enige manier zou je zeggen, is dit:
code:
1
2
3
4
5
6
7
8
9
10
public class User {
  public function Login(a,b) {
    //stuur data naar server en verkrijg data
    //op het moment (event) dat je al het data van de server hebt gekregen, doe dan functie complete
  }

  public function Complete() {
    //roep een functie van de klasse toepassing aan met als parameter een boolean of het inloggen gelukt is of niet.
  }
}


Dit betekend dat de klasse user, afhankelijk is van de klasse toepassing (iets wat je helemaal niet wilt),
En bij een groot programma wordt bijna alles afhankelijk van elkaar..

Kan dit niet op een andere manier? Is hier uberhaubt wel een nette manier voor of zit ik helemaal verkeerd te denken?

Weet iemand hoe dit in grote projecten wordt aangepakt? http://www.adobe.com/products/air/showcase/

[ Voor 3% gewijzigd door Verwijderd op 10-03-2010 21:18 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 23:10

Janoz

Moderator Devschuur®

!litemod

Persoonlijk zou ik helemaal geen login methode in user willen hebben. Uiteraard is bij het inloggen een user nodig, maar dat maakt het nog niet de verantwoordelijkheid van de user. Sowieso is het al raar dat je aan de methode van user een username mee moet geven. Over het algemeen zou een userobject donders goed moeten weten welke username bij hem hoort. Ik zou eerder denken aan een soort authenticator. Die authenticator krijgt vervolgens een user en eventueel een callback.

het is inderdaad een goed streven om er voor te zorgen dat je classes niet tightly coupled worden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Caelorum
  • Registratie: April 2005
  • Laatst online: 07:32
je kan toch gewoon binnen de 'toepassing' luisteren naar een 'loginComplete' event van de User die wordt gedispatched binnen die complete-functie

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Janoz schreef op woensdag 10 maart 2010 @ 21:24:
Ik zou eerder denken aan een soort authenticator. Die authenticator krijgt vervolgens een user en eventueel een callback.
Ah ok. Maar dan moet user of authenticator alsnog een aanroep doen naar de user interface.. Dat is een beetje mijn probleem.. Misschien is het mooi om de klasse authenticator een functiepointer mee te geven, en als er is geauthenticate, dan roept authenticator die functiepointer aan. (ik geloof niet dat dat zo heet in AS3, maar een soortgelijk principe).

@ Ceal..
Dat is waarschijnlijk de holy grail waar ik naar op zoek ben.. tnx.

[ Voor 6% gewijzigd door Verwijderd op 10-03-2010 21:42 ]


Acties:
  • 0 Henk 'm!

  • 321X
  • Registratie: April 2009
  • Laatst online: 01-01-2023
Je kan zoals Janoz aangeeft een aparte Authentication class maken.

Als je een gebruiker wil laten inloggen instantieer je die authentication class en hang je er een eventlistner aan.

Deze eventlistener kan je dan invoken door een event te dispatchen als het inloggen mislukt of gelukt is.

Een goed artikel hierover: http://www.adobe.com/devn...vent_handling_as3_03.html en voor jou geldt denk ik ook het kopje "Customizing events".

Succes

321X


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb dus een zelfgemaakte event nodig als ik iets erbij mee wil sturen? (zoals of het inloggen gelukt is of niet) Of kan dat ook met event.target ?

[ Voor 12% gewijzigd door Verwijderd op 11-03-2010 17:20 ]


Acties:
  • 0 Henk 'm!

  • 321X
  • Registratie: April 2009
  • Laatst online: 01-01-2023
Verwijderd schreef op donderdag 11 maart 2010 @ 17:18:
Ik heb dus een zelfgemaakte event nodig als ik iets erbij mee wil sturen? (zoals of het inloggen gelukt is of niet) Of kan dat ook met event.target ?
Zou ik persoonlijk wel doen, misschien iets meer werk maar kan je modulair te werk gaan en op specifieke events abonneren.

Als je een beetje door het Flex Framework heen klikt (gaat makkelijk met Adobe Flex) kan je zien hoe VideoDisplay z'n events dispatcht. Daar is een VideoEvent.STATE_CHANGE die je kan opvangen (met addEventListener) en dan kan je van het event object properties opvragen die betrekking hebben op het betreffende object (in dit geval VideoDisplay).

Zie: http://livedocs.adobe.com...mx/events/VideoEvent.html

321X


Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Een jaar geleden was ik nog Flex developer, toen maakte ik veel gebruik van het open source Cairngorm framework van Adobe, voor Flex en AIR.

Het komt er op neer dat je van elke actie die kan plaatsvinden een Event maakt, deze events registreer je bij de FrontController en je koppelt ze aan een Command. Dit command voert zijn code uit en haalt eventueel op de achtergrond data van de server via je webservices. Als je command klaar is kan het waardes aanpassen in je Model object, een singleton class. In je model heb je bijvoorbeeld een variabele newsItems:ArrayCollection waar je alle opgehaalde nieuws items als een array (of xml wat je wilt) opslaat. Omdat alle variabelen in je model [Bindable] zijn wordt de GUI nu automatisch geupdated omdat je ergens een List control hebt met als dataSource model.newsItems.

Lang verhaal en zonder alle gory details, maar dit is hoe je een grotere applicatie kan opzetten. Er zijn nog meer van dit soort frameworks voor Flex/AIR zoals PureMVC. Artikel met een vergelijking tussen de twee

[ Voor 6% gewijzigd door zwippie op 12-03-2010 10:43 ]

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.

Pagina: 1