Découverte du MVC dans Pixlib

Voici ONU artículo petit organización l'décrit qui MVC d'un projet Pixlib 3.0.

Ce n'est pas hasard un, si le patrón MVC est dans declive de nombreux langages et présent dans le coeur de la plupart des applicatif marco Orientes. La découpe d'un projet sous la forme Modèle-Vue-Contrôleur apporté beaucoup de souplesse et donc ONU ganancia de temps no négligeable dans le maintien et l'aplicación d'une evolución.

Courte synthèse sur le patrón Modèle-Vue-Contrôleur

Le MVC est modèle de concepción qui regroupe les clases solicitud d'une ONU en 3 groupes:
• le groupe des Modèles, qui corresponde código au permettant de gérer et manipuler les données;
• le groupe des Vues, ​​qui rassemblé tout ce qui sert d 'interfaz avec l'utilisateur laquelle va interagir;
• le groupe des controleurs, qui traite les événements et qui notific de Droit des Changements éventuels.

Bien Que très formelle, organización l'd'un projet sous forme de MVC estructura une offre propre et solide. Plus de détails sur l'article de Wikipedia: Modèle-Vue-Contrôleur

Le MVC dans Pixlib peut être aussi appelé MVC + FC (Model-View-Comando + frontController), vehículo de la partie contrôleur est composée d'un frontController et d'un ensemble de Commandes.

Le MVC dans est mundiales Pixlib

Organisé autour de 3 localizadores globaux, bases sur une logique de Singleton ( Singleton (patrona de la concepción) ), le MVC «hizo Pixlib» permet d'atteindre de manière globale chaque élément de l'aplicación.

Chaque Localizador est agrégateur un:

  • le PXModelLocator agrégé les PXModel;
  • le PXViewLocator agrégé les PXView;
  • le PXFrontController agrégé les PXCommandes.
PXView, PXModel et leurs localizadores.

Le groupe des vues et des modèles fonctionne de la même manière.
PXView et PXModel sont des interfaces possèdent qui implémentation une abstraite ( Classe abstraite ) (PXAbstractView et PXAbstractModel) que l'on va Etendre Pour en faire concret uso un.

Donc en pratique, chaque vue doit Etendre la classe PXAbstractView;

  MyView extends PXAbstractView public class MyView extiende PXAbstractView
 {
	 MyView ( viewName : String ) función pública MyView (viewName: String)
	 {
		 null , viewName ) ; super (null, viewName);
	 }
 } 

et chaque modèle doit Etendre la classe PXAbstractModel.

  MyModel extends PXAbstractModel public class MyModel extiende PXAbstractModel
 {
	 MyModel ( modelName : String ) función pública MyModel (ModelName: String)
	 {
		 null , modelName ) ; super (null, ModelName);
	 }
 } 

Ces deux clases de argumentos comme prennent dans le constructeur: le propietario Que laisserons nous pour le momento un nulo (pour en savoir plus rendez-vous sur: La noción de Plugin, le multi-MVC dans Pixlib ), et le nombre qui servira d ' identifiant único.

Lors de l'instanciation de clases ces, l'nombre de argumento va être utilisé comme identifiant par único le localizador (PXModelLocator verter MyModel et PXViewLocator verter MyView). Ce qui nous va permettre de récupérer les instancias de modèles et de vues depuis n'importe quel endroit de aplicación notre.

  // Stockage implicite dans les localizadores faits lors de l'instanciation
 "idUnique" ) ; nueva MyModel ("idUnique");
 "idUnique" ) ; nueva MyView ("idUnique");

 // Qui permet une récupération des instancias de manière globale.
 . locate ( "inUnique" ) ; // retourne l'instance de MyModel . PXModelLocator getInstance () localizar ("inUnique."); // Retourne l'instancia de MyModel
 . locate ( "inUnique" ) ; // retourne l'instance de MyView . PXViewLocator getInstance () localizar ("inUnique."); // Retourne l'instancia de MyView 
PXCommandes et PXFrontController

Différent légèrement, PXFrontController permet De Lier des commandes una ONU identifiant et de les exécuter selon cne besoins.
Tout comme les modèles et les vues, les commandes ont une interfaz PXCommand et une implémentation Abstraite PXAbstractCommand qu'il faudra Etendre pour l'utiliser.

Le código de la base d'une commande est donc:

  MyCommand extends PXAbstractCommand public class MyCommand extiende PXAbstractCommand
 {
	 onExecute ( event : Event = null ) : void anular onExecute función protegida (evento: Evento = null): void
	 {
		 // Notificación de fin d'exécution, asynchrones commande coche!
		 fireCommandEndEvent ();
	 }
 } 

Vierta pouvoir l'utiliser vía le contrôleur, Devons nous ajouter MyCommand au PXFrontController, en utilisant EventType comme identifiant único.

  PXFrontController = PXFrontController . getBaseController ( ) ; controlador var: PXFrontController = PXFrontController getBaseController ();.
 "onCommand" , MyCommand ) ; . controlador pushCommandClass ("bajo demanda", MyCommand); 

Ce qui nous permettra depuis n'importe quel endroit de profesión l'exécution de la commande en passant au frontController ONU événement qui comme un EventType l'identifiant de commande notre.

  . handleEvent ( new Event ( "onCommand" ) ) ; . PXFrontController getBaseController () handleEvent (nuevo evento ("bajo demanda").); 

À Noter Que les commandes dans asynchrones sont Pixlib, ce qui obligar d'appeler la méthode fireCommandEndEvent () verter notificador La Fin de leurs ejecuciones.

Qui comunicado avec qui?

Maintenant que vous savez instancier et récupérer les modèles, vues et au sein de commandes Pixlib, Voyons comentario organizador ce tout petit monde dans une aplicación.

Des modèles vers les vues

Le couplage faible est un mot maître des dans projet Pixlib.
C'est verter cette razón que l'organización de la comunicación entre les modèles et les vues depuis l'est Geree extérieur.

  PXView = new MyView ( "MyView" ) ; vista var: PXView = new MyView ("MyView");
 MyModel = new MyModel ( "MyModel" ) ; modelo var: MyModel = new MyModel ("MyModel");
 view ) ; . modelo addListener (ver); 

Les modèles ne connaissent pas les vues et viceversa.
La comunicación se passe a través de le système événementiel et la notificación de changement.

En pratique, lorsqu'un subit modèle ONU changement, il le notific.

  MyModel extends PXAbstractModel public class MyModel extiende PXAbstractModel
 {
	 change ( ) : void cambio de función pública (): void
	 {
		 "Model change" , this ) ; registrador de depuración ("cambio de modelo", este).;
		 PXStringEvent ( "onChange" , this , "ma nouvelle String" ) ) ; notifyChanged (nuevo PXStringEvent ("onChange", esto "nouvelle ma String"));
	 }
 } 

La ou les vues abonnées au modèle notificación cette reçoivent et réagissent en conséquence.

  MyView extends PXAbstractView public class MyView extiende PXAbstractView
 {
	 onChange ( event : PXStringEvent ) : void función pública onChange (event: PXStringEvent): void
	 {
		 "Model send me new string " + event . value , this ) ; . logger de depuración ("enviar Modelo mí nueva cadena" + evento valor, esto.);
	 }
 } 
Des vues vers les commandes

Punto principal d'entrée des aplicaciones, les vues sont en général à l'origine de l'exécution des commandes.
Grâce à la méthode firePrivateEvent, les vues peuvent exécuter n'importe quelles commandes agrégées sur le PXFrontController du MVC.

  // Agrégation de la commande «MyCommand» sur le PXFrontController
 PXFrontController = PXFrontController . getBaseController ( ) ; controlador var: PXFrontController = PXFrontController getBaseController ();.
 "onCommand" , MyCommand ) ; . controlador pushCommandClass ("bajo demanda", MyCommand);
 // Exécution de MyCommand une vue depuis
 Event ( "onCommand" ) ) ; firePrivateEvent (nuevo evento ("bajo demanda")); 
Les commandes vers les modèles ou les vues

Étant les gestionnaires de l'aplicación, les commandes permettent de modificador des vues, des modèles ou l'exécution de nouvelles commandes.

  CheckCommand extends PXAbstractCommand public class CheckCommand extiende PXAbstractCommand
 {
	 onExecute ( event : Event = null ) : void anular onExecute función protegida (evento: Evento = null): void
	 {
		 // Modificación d'un modèle
		 ) . release ( ) ; getModel ("MyModel") liberación (.);
		 // Modificación d'une vue
		 ) . show ( ) ; getView ("MyView") show ().;
		 // Ejecución d'une autre commande
		 Event ( "onChange" ) ) ; firePrivateEvent (nuevo evento ("onChange"));

		 fireCommandEndEvent ();
	 }
 } 

En resumen:

  • le MVC dans Pixlib est global;
  • chaque groupe de classe possède ONU Locator (PXModelLocator pour les modèles, PXViewLocator pour les vues, PXFrontController pour les commandes);
  • les modèles notifient les vues;
  • les vues lancent des commandes;
  • les commandes permettent de modificador les modèles et / ou les vues, ainsi que l'exécution de nouvelles commandes;

Vierta continuador:

Codding feliz con Pixlib!

Esta entrada fue publicada en Core , Marco , Tutorial . Guarda el enlace permanente .

Una respuesta a Découverte du MVC dans Pixlib

  1. Pingback: La noción de Plugin, le multi-MVC dans Pixlib | Marco Pixlib plataforma Flash

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">