Version 1.0.0 - 2006/01/31

7.4 Les contextes composants

Il peut arriver que vous souhaitiez complexifier votre contexte, par exemple déléguer des éléments pour aérer votre code source ou réutiliser des concepts. Un autre bon exemple est lorsque vous souhaitez subdiviser votre template en zones, toutes associées à un contexte différant appartenant au contexte de la page principale. Le développement à l’aide des composants est très efficace mais elle nécessite plus d’attention de votre part. Le mécanisme de création d’un contexte est délicat. D’abord vous êtes obligé de passer par une «  factory ». Comme nous le verrons plus loin, le choix de la « factory » agit directement sur le comportement qu’aura le contexte. A vous de sélectionner celle qui correspond. De plus, le fait d’avoir une hiérarchie de contexte vous impose certaines contraintes. Premièrement, vous devez prévoir nécessairement une méthode « GET » chargée de fournir le contexte. Cette méthode doit contenir tout le processus de gestion du contexte, de la création à la récupération. Choisissez une nomenclature logique, cela sera utile à vous et à la plate-forme pour naviguer dans la grappe d’objets. Deuxièmement, vous ne devez en aucun cas conserver une référence sur les composants. Etant données que la plate-forme peut sauvegarder un contexte, selon vos spécifications, vous risquez de tomber sur un cas de copies fantômes. Si vous optimiser votre gestion de composant, nous vous conseillons de passer par un attribut de classe et de faire du « lazy loading » pour son initialisation. N’oubliez pas de détruire l’attribut avant la sérialisation. Il existe deux sortes de composant, ceux qui utilisent l’instance NoasUserRequest et ceux qui utilisent l’instance NoasUserSession pour factory. Pour la première, il s’agit de composants sans état. Pour le second, il s’agit de composants avec état.

Contexte composant

<?php

class ManagerWebAppPage extends ManagerPageContext {
  private $managerWebAppPageWebAppListComponent;

  public function serialize() {
    parent::serialize();
    $this->managerWebAppPageWebAppListComponent = null;
  }
  public function getManagerWebAppPageWebAppListComponent( ) {
    if(empty($this->managerWebAppPageWebAppListComponent)){
      $this->managerWebAppPageWebAppListComponent =
                 self::getApplication()->getSession()->getDC($this
                              ,"managerWebAppPageWebAppListComponent"
                              ,"manager.context.ManagerListComponent");

    }
    return $this->managerWebAppPageWebAppListComponent;
  }
}
?>

 

© 2005 Réoka Djohou, tous droits réservés.