MVC, hoe te koppelen?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben een simpele Flash 'RIA' applicatie aan het maken om mijn mp3 die ik thuis heb op het werk te kunnen luisteren. Dit leek me ook een mooi moment om mij op MVC in Flash te storten (ik heb al ervaring met MVC in Zend Framework). Het bouwen vordert snel en ik heb de meeste functionaliteit gebouwd, maar ik loop tegen een probleem, of beter een vraag met betrekking tot MVC op.

Mijn MVC elementen hebben de volgende verantwoordelijkheden
Models: Models hebben elk properties met setters, getters en ze dispatchen een event als ze gewijzigd worden.
Views: De views hebben lists, datagrids en anders componenten. Deze luisteren naar de models en wijzigen de weergave wanneer de model veranderd.
Controllers: Mijn controllers luisteren naar user input op de view en wijzigen vervolgens de models.

Mijn probleem is: hoe koppel ik dit allemaal netjes? Op het moment initialiseer ik in mijn Main class eerst alle models, daarna de views en daarna de controllers. Ze worden allemaal aan een Registry object gehangen, en de views en controllers zoeken hier ook naar hun EventDispatchers (respectievelijk dus de models en views die er bij horen).

Mijn gevoel zegt echter dat dit tegen het idee van OO programmeren en MVC in gaat, omdat de code wel netjes is opgedeeld naar functie, maar wel bijna alle objecten centraal in een Registry hangen. Met het aantal models views en controllers wat ik op het moment heb is het nog goed te doen, maar ik kan me voorstellen dat als er een aantal dialogen (met extra views/controllers) bij komen het allemaal een wat moeilijker en onduidelijker wordt.

Is er een nettere methode om dit te doen, of zit ik al op de juiste weg?

Acties:
  • 0 Henk 'm!

Verwijderd

Kun je je objecten niet on demand initialiseren?

Laten we zeggen dat je allemaal controllers hebt als:
track/wijzig track/toevoegen track/verwijderen
dan heb is het toch niet nodig dat deze allemaal tegelijk geïnitialiseerd zijn?

Net als de Views en Models. Je track/wijzig controller heeft waarschijnlijk ook een track/wijzig View. En maakt gebruik van een Track Model, mogelijk een Album Model een Artist Model. Dan lijkt het me niet dat alle andere Views en Models geïnitialiseerd moeten zijn.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op woensdag 12 augustus 2009 @ 21:42:
Kun je je objecten niet on demand initialiseren?

Laten we zeggen dat je allemaal controllers hebt als:
track/wijzig track/toevoegen track/verwijderen
dan heb is het toch niet nodig dat deze allemaal tegelijk geïnitialiseerd zijn?

Net als de Views en Models. Je track/wijzig controller heeft waarschijnlijk ook een track/wijzig View. En maakt gebruik van een Track Model, mogelijk een Album Model een Artist Model. Dan lijkt het me niet dat alle andere Views en Models geïnitialiseerd moeten zijn.
Hm, ik heb iets andere models als uitgangspunt genomen. Een aantal voorbeelden van models:
AlbumCollection
Wat deze model doet is een lijst van albums presenteren, en kan gevraagd worden om de server te queryen voor een bepaalde zoekactie (het zoeken is geinspireerd door itunes, per toets een nieuwe lijst samenstellen). Wanneer resultaten ontvangen zijn wordt er een change event gedispatched en gaat de view er mee aan de slag.

Album
Dit is een simpel album object met wat specifieke eigenschappen. Niet echt een model maar meer een data object wat word verzameld in de AlbumCollection en word gebruikt om geselecteerde items in de AlbumView te identificeren.

CurrentlyPlaying
Deze heeft functies om een nummer in te stellen, en deze te spelen, stoppen, pauzeren etc. Daarnaast bied hij alle info over het huidige nummer aan, inclusief afgespeelde en totale tijd.

De models zijn allen losstaande objecten die enkel events dispatchen, dus zelf geen acties ondernemen buiten zichzelf om.

Vrij andere aanpak dus, zit ik in de verkeerde weg te denken?

Acties:
  • 0 Henk 'm!

  • Juicy
  • Registratie: December 2000
  • Laatst online: 12-09 13:52
Kijk ook eens naar Model View Presenter. Zie ook http://www.martinfowler.com/eaaDev/uiArchs.html voor wat meer achtergrond info.

-