Découverte du MVC dans Pixlib

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

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

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

Le MVC est modèle de conception qui regroupe les clases d'application des une en 3 groupes:
• le groupe des Modèles, qui corresponden 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 notific qui 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 de sur une logique de Singleton ( Singleton (patrón de concepción) ), le MVC «hizo Pixlib» permet d'atteindre de manière globale chaque elemento application de l'.

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 sont des PXModel interfaces possèdent qui implémentation une abstraite ( Classe abstraite ) (PXAbstractView et PXAbstractModel) Que l'on va étendre vierten en faire concret uso de un.

Donc en pratique, chaque vue doit étendre 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 étendre 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);
	 }
 } 

Clases de deux Ces argumentos comme dans le prennent constructor: le propietario de 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'instanciación 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 casos De modèles et de vues depuis n'importe quel endroit de aplicación notre.

  / / Stockage implicite dans les faits localizadores lors de l'instanciación
 "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 () busque ("inUnique"); / / retourne l'instancia de MyModel
 . locate ( "inUnique" ) ; // retourne l'instance de MyView .. PXViewLocator getInstance () busque ("inUnique"); / / retourne instancia de l'MyView 
PXCommandes et PXFrontController

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

Le code de la base d'une commande est donc:

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

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

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

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

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

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

Qui comunicado qui avec?

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

Modèles Des vers les vues

Le couplage faible est un projet mot maitre Dans un Pixlib.
C'est verter cette razón Que l'organización de la Communication 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" ) ; var modelo: MyModel = new MyModel ("MyModel");
 view ) ; . modelo addListener (ver); 

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

En pratique, modèle lorsqu'un changement sin Subit, il le notific.

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

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

  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 debug ("me envía Modelo 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 ) ; . pushCommandClass controlador ("onCommand", MyCommand);
 / / Ejecución de MyCommand une vue depuis
 Event ( "onCommand" ) ) ; firePrivateEvent (nuevo evento ("onCommand")); 
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 protected override función OnExecute (event: Event = 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édé ONU Localizador (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 modificadoras les modèles et / ou les vues, ainsi de 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 .

One Response to Découverte du MVC dans Pixlib

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

Deja un comentario

Su 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="">