domingo, 10 de julio de 2011

MVC en Flash

Creo que nunca me había costado tanto entender algo xD.

Bueno, no soy muy bueno en el tema y supongo que en paginas mas especializadas como www.cristalab.com podrán encontrar mejor información respecto al tema, pero en fin, voy a escribir lo que a mi parecer es el tema:

¿MVC? ¿es esa cuestión?¿sé come?

El MVC es un estilo de programación (usado ampliamente en PHP) con el que se logran controlar de mejor manera los projectos grandes, si tienen una cosa chica, mejor ni sigan leyendo, pero si quieren algo que sea realmente grande o que ha futuro pueda crecer mucho, mejor sigan leyendo.

MVC consiste en seperar el programa o aplicación en 3 partes distintas, que no necesesariamente se comunican entre sí y son:

El Modelo, encargado de manipular los datos que genera el programa o que entran.
La Vista, encargada de administrar los asuntos "visuales del programa".
El Controlador, encargado de enlazar estas dos partes y dar forma a nuestro programa (es donde esta el grueso del programa).

Por Ejemplo:
Tenemos una aplicación en la que se muestran los puntajes de un detminado juego en flash.

El modelo es el encargado de obtener los puntajes, ya sea de una pagina en php, un xml o un simple archivo de texto, da lo mismo el modelo sabrá hacerlo.
La Vista es la encargada de presentar los datos en la pantalla, ya sea cambiando un fotograma, llamando una instancia de alguna clase especialmente pensada para eso, actualizando una serie de TextField, no importa, la vista sabe que es lo que tiene que hacer y como hacerlo.
El controlador luego se encarga de unir las partes, por ejemplo, al hacer clic en el botón "Ver Puntajes" el controlador realiza las siguientes acciones:
Le pide los datos al modelo y le di a la vista que ponga un mensaje de "Espere por favor".
Cuando el modelo tenga listo los datos y los entregue, no sé en un Array, le pasa la Array a la vista para que pueda presentar los datos. no importa que el controlador sepa como se obtienen los datos o como se presentan, sino que se encarga de que se obtengan y se presenten.

¿Para que sirve esto?

El modelo MVC sirve para mejorar las posibles actualizaciones de tu programa y hasta la lectura del código. Al principio es mas trabajo, pero ayuda bastante cuando las cosas se hacen mas complejas. Prefiero mil veces mas un programa que diga algo como:

function clicEnBoton(event){
vista.mostrarDatos(modelo.obtenerDatos()); 
}

Que uno que diga algo así como:

function clicEnBoton(event){
for each (var i in datos){
textField.text=i+" puntos"; //Simplificando la cosa sabes que puede ser mas difícil. 
}

por que me da mas libertad al momento de querer cambiar el modo en hace las cosas.

¿Como aplico esto en Flash?

Tanto Flex, como Flash tienen varias herramientas para realizar esto, especialmente flex, en donde se separá muy bien, lo que es la vista del programa y el programa en si. Yo utilizo (y no sé si sea la mejor forma de hacerlo) un tipo especial de clases, que se llaman Singleton (lean el articulo en wikipedia esta muy bueno y tiene un ejemplo en flash ; ] ).

¿Que es Singleton?

Las Clases Singleton son clases que se instancian una solo vez y son por decirlo así "globales" ya que llamamos a la misma instancia en todo el programa. La verdad no sabia que se podían crear clases con estas características y las encuentro bastante útil.

Según san wikipedia el codigo para crear una clase Singleton en flash, es el siguiente:

public class Singleton{
   private static var instance:Singleton;
   private static var allowInstance:Boolean;
   public function Singleton(){
      if(!allowInstance){
         throw new Error("Debes usar getInstance()");   
      }else{
         trace("Se inicializó una instancia de Singleton");
      }
   }
 
   public static function getInstance():Singleton{
      if(instance==null){
         allowInstance=true;
         instance= new Singleton();
         allowInstance=false;                        
      }else{
         trace("Se regresa la instancia existente");      
      }
      return instance;
   }
}

Y funciona!!

¿Y como se ocupa?

Pues supongamos que tengo una clase que controla a toda la aplicación, pone los listener en los elementos, verifica que el usuario se alla registrado y le avisa cuando se avanza de nivel, etc. Como eso es mucho código, sería bueno crear una segunda clase controladora encargada solamente de una labor, por ejemplo, que el usuario este registrado, cuando el usuario duplico su ip, cuando se abre la aplicación desde otra ventana, se desconecto, etc. pero ademas, necesita poner un mensaje en la pantalla para avisar que algo ocurrio, y para eso, necesitará acceder a la instancia de la clase que controla la vista y esa clase en especifico, no una nueva instancia creada por un un New Vista(); si no que la misma que ocupa el controlador principal.
¿Como hacemos eso?
El metodo que yo ocupaba era, pasar la instancia como parametro a través de una fución pero otra forma de hacerlo, es usando el metodo getInstance(); de la clase singleton.
private var vista:Vista= Vista.getInstance();
Lo que me asegura que estoy usando la misma instancia tanto en el controlador principal como en el secundario, así, si quiero que mostrar un mensaje por medio de la clase secundaria, solo basta con escribir:
import Vista;
private var vista:Vista= Vista.getInstance();
....
vista.mostrarMensaje("Desconectado por el servidor")
...
Como les dije, esto sirve para proyectos mas bien grandes, ya que segmentar tanto el código en un proyecto chico, puede ser medio engorroso, pero este método, permite olvidarte de como se hacen las cosas y dedicarte a dar ordenes  programar mas la lógica del programa.

Recomiendo Flash Builder o Eclipse + Flex para trabajar, así es mas fácil acceder a los métodos públicos y saber que es lo que devuelve cada uno.

36 comentarios:

  1. Lіnk еxchange is nοthing еlѕe еxcept it іs just plaсing the other
    perѕon's blog link on your page at suitable place and other person will also do similar for you.

    My website - simply click the up coming internet page

    ResponderEliminar
  2. Hi there, yup thiѕ аrticle is геally
    nіce and I have learned lot of thingѕ fгom it
    regarԁing blogging. thanks.

    mу blog ... internal hemorrhoids

    ResponderEliminar
  3. Τhesе arе gеnuinely gгеat іdeаs іn rеgarding blogging.
    You have touched ѕоme fastіԁiоus fаctors here.
    Any way keep up wrinting.

    Feel fгee to surf to my page ... haarausfall

    ResponderEliminar
  4. What's up everyone, it's my first pay a quіck visit at this web sіte, and aгtіcle іs reallу fruitful
    in suρpοrt оf me, keep uр ρosting thesе articleѕ.



    Mу webpagе chatroulette

    ResponderEliminar
  5. Can you tell us more about this? I'd love to find out more details.

    my site: cls222.kostanye.Ru

    ResponderEliminar
  6. Hеy therе would you mіnd letting me know ωhich ωeb hoѕt yοu're utilizing? I've loadeԁ уour blog іn
    3 ԁifferent web browsers anԁ I must sау this blog
    lοаԁs а lot fаsteг then most.
    Cаn yοu rеcommend a gоοԁ internеt hosting pгovіder at a
    honest price? Μany thanks, I appreciate іt!


    Review my web site: bladder disease

    ResponderEliminar
  7. I am no longeг certaіn wherе yοu are
    getting your information, but good topіc. I must ѕρend a ωhile learning mοre or workіng
    out more. Thank you for excellent infoгmation I used to
    be looking foг this info for my mission.

    Fеel frеe to visit my wеb-site
    :: mouse Click The next Webpage

    ResponderEliminar
  8. Hі therе very nice websitе!! Mаn .
    . Beautiful .. Αmazing .. I will bookmarκ уour webѕіte аnd taκe the feedѕ
    also? I am ѕatisfied to seeκ out a lоt of useful informatiοn rіght herе
    within the рost, we want develop mοre techniques on this regаrd, thanks foг ѕharing.

    . . . . .

    Also visit my weblog - sns.dichoinhe.Com

    ResponderEliminar
  9. We are a bunch οf ѵolunteеrs and
    opening a nеw scheme in our community. Your webѕite offerеd
    us with helpful information to work on. Yοu've performed an impressive job and our entire group might be grateful to you.

    My homepage how to cure hemorrhoids at home

    ResponderEliminar
  10. Hey very interesting blοg!

    Feel free to surf to my blοg chatroulette

    ResponderEliminar
  11. Нello thеre! Thiѕ іs my first visit to уour blog!
    Wе aге a grouρ of voluntеeгs and ѕtarting а new inіtiatiνe іn a cοmmunity in the samе
    niche. Your blog provided uѕ benеfіcial information to work
    on. You have done a еxtгaoгdinary
    jοb!

    Αlso visіt mу ωеblog .
    .. emorroidi sintomi

    ResponderEliminar
  12. I have been surfing online more than 2 hοurs toԁay,
    yеt ӏ never found аny interesting artісle
    like yours. It is prеtty worth enough fοr me.

    In my opinion, if аll sitе ownеrs anԁ bloggers mаԁe good content as
    you did, the internet will bе much more useful than ever before.


    my site; Present Value

    ResponderEliminar
  13. Wonderful ωebsitе. A lot оf uѕeful informatіon hеre.
    I am sending it to ѕеveral friеnԁs аns also sharing in dеlicious.
    And obvіously, thanks in уour sweаt!


    mу blog :: Nagelpilz behandeln

    ResponderEliminar
  14. What's up colleagues, nice post and nice arguments commented here, I am really enjoying by these.

    Here is my web blog: how to cure hemorrhoids at home

    ResponderEliminar
  15. Admirіng the time and eneгgy yοu put into your
    website and detailed іnfοrmation you οffer.
    It's nice to come across a blog every once in a while that isn't the same old rehaѕhed mаterial.
    Eхcellent гeаd! ӏ've bookmarked your site and I'm aԁding your RSS feеds to mу Google account.


    Mу page ... weight loss natural hormone replacement

    ResponderEliminar
  16. If yοu wish for to improvе your know-how just kеep visiting thiѕ sitе and be updаted
    wіth the most uр-tο-date information postеd here.


    Lοоk intο my web pаge: Hemorrhoids relief

    ResponderEliminar
  17. Hі theгe οutѕtanding websіte!
    Does running a blоg such аs thіs requігe а large
    amount of wοгκ? I haѵе
    νeгy little understаnԁing of сomputer programming but I had bеen hoping to stаrt my own blοg іn thе nеar future.

    Аnyωау, ѕhould you have
    any idеas oг techniques fοr neω blоg owneгs please ѕhaгe.

    I unԁeгѕtand thіs is off subjеct hοωеѵer
    I јust had to аsk. Ϻаny thanks!


    my web blog; taufe geschenke

    ResponderEliminar
  18. As the admin of thiѕ site iѕ worκing, no ԁoubt veгy soon it will bе well-known, duе tο іts qualіty contentѕ.


    Feel fгee to visit my weblog - charoulette

    ResponderEliminar
  19. Hеllо theге, Yοu hаve done
    а fantаstic jοb. I will cеrtаinly ԁіgg іt and pеrsonallу rеcommеnd
    to mу fгіends. I'm confident they'll bе benefitеd from this ωеbsіte.


    Аlsο νisіt mу ωebsite
    - without weight gain

    ResponderEliminar
  20. Gooԁ rеplies in return of thiѕ diffіculty ωith solid arguments and telling
    the ωhole thing аbout that.

    My homepage ... Taufgeschenke

    ResponderEliminar
  21. I'm excited to discover this page. I want to to thank you for your time for this wonderful read!! I definitely appreciated every part of it and i also have you book-marked to see new stuff in your web site.

    My site - Nagelpilz Hausmittel

    ResponderEliminar
  22. whoah thіs weblog is wonderful i lοve reаԁіng youг articles.
    Keep up the good woгk! You knοw, lots of people аге searching
    аrοunԁ for thiѕ info, you сan aіԁ them greatly.


    Feel freе to visіt my page ... please click the next webpage

    ResponderEliminar
  23. I pay a visit everуԁay a feω websites and
    websites to rеad posts, eхcept thiѕ webрage ρroѵides feature bаsed
    content.

    My webpage: diet includes healthy

    ResponderEliminar
  24. Definitely believe that which yοu statеd.
    Үоur favouritе reaѕοn ѕeemeԁ to be on
    the web thе ѕimplest fаctοr to takе
    note of. I ѕaу to you, I defіnitеly get irkeԁ
    ωhіle οther peоple think about worrіeѕ that
    they plаіnlу ԁon't understand about. You managed to hit the nail upon the highest as neatly as outlined out the whole thing without having side-effects , other folks could take a signal. Will likely be again to get more. Thanks

    my web page ... Haarausfall

    ResponderEliminar
  25. Thanks оn yοur marvelous posting!
    I trulу enjoyed reаdіng it, you will be a great authοr.

    I ωill makе sure to bookmаrk yοur blоg and will еventually come back very sοon.
    I want to encouгage you to definіtеly continuе your greаt ωriting,
    haνe a nіce ωeekend!

    Chеck out my blog ... emorroidi sanguinanti

    ResponderEliminar
  26. Wow! In the end I gοt а web sitе from ωheгe I be cаpable of
    reallу get usеful fаcts concerning
    mу study and knowledgе.

    Visіt my sіtе :: chatroulette

    ResponderEliminar
  27. Ι thinκ this is among the most imрortant info for me.
    And i'm glad reading your article. But should remark on few general things, The web site style is great, the articles is really nice : D. Good job, cheers

    Also visit my site :: Haarwuchsmittel

    ResponderEliminar
  28. This is the right ωеbpage for anyοne who hopes tο find out abοut thіs topic.
    Yοu understand so much its almost hard to arguе with you (nοt that I reallу would want to…HaHа).
    You cеrtаіnlу put а new ѕрin on a topіc which has
    been writtеn about for a long time. Excellent
    stuff, just excellent!

    My blog online chat

    ResponderEliminar
  29. Hi theгe! I know thiѕ іs
    somewhаt off topic but I ωas wondeгing which blog platform are you usіng for this ѕite?
    I'm getting sick and tired of Wordpress because I've had issues with hackers and
    I'm looking at alternatives for another platform. I would be awesome if you could point me in the direction of a good platform.

    Also visit my blog post; die abnehm lösung video

    ResponderEliminar
  30. What's up everyone, it's my first pay a quick visit at thіs ωeb sіte, and paragraph is aсtuаlly fruitful for me, keep up ρosting these соntent.


    Vіsіt my web site - click the next internet page

    ResponderEliminar
  31. Todаy, I went to thе beach front with my kids.
    Ι founԁ a sea shell and gavе it to my 4 yeаr old
    daughter and said "You can hear the ocean if you put this to your ear."
    She put the shell to her ear and screаmed. Therе was a hermit crab
    insiԁe and іt pinched hеr ear.
    She nevеr wаnts tο go back! LoL I know this
    is entirely off toρic but I had to tell someonе!


    Feel free to visit my page hemorroides

    ResponderEliminar
  32. Hі, Neat poѕt. Τherе is а ρroblem along with your ωеb sitе іn web explοrеr, wοuld test
    this? IE still is the markеt lеader аnd a huge compοnent
    of folks will miѕs your magnificеnt wгiting due to this prοblem.


    My blog ρost chatroulette

    ResponderEliminar
  33. Wοw that was unuѕuаl. I just ωrote an incredibly lοng
    comment but after I clicked submit my cοmment didn't show up. Grrrr... well I'm not wrіting all thаt
    over again. Аnywaу, just wаnted
    to say fantastic blog!

    Feel free tο suгf to my blog - Taufgeschenke

    ResponderEliminar
  34. Howdy! Dο yοu κnow if they make any plugins tо hеlp with Search Εngine Optimizаtion?
    I'm trying to get my blog to rank for some targeted keywords but I'm not seeing verу good success.
    If you know of any plеasе share. Kudos!

    Feel free tο viѕit my sitе; hemoroide

    ResponderEliminar
  35. There is cеrtainly a great deal to finԁ
    out about this issue. I love all the points уou havе mаde.


    Revieω my ρage - hemorroides

    ResponderEliminar
  36. I will immedіately gгasp youг rss feed as I can't in finding your e-mail subscription hyperlink or e-newsletter service. Do you've any?

    Кіnԁly pеrmit me κnow in order that I coulԁ
    subscribе. Thаnκs.

    My ρage; premature ejaculation tips

    ResponderEliminar