Patrons de conception/Chargement différé

Un livre de Wikilivres.
Patron de conception
Catégorie : EntrepriseArchitecture de source de données
Nom français : Chargement différé
Nom anglais : Lazy Load
Un objet qui ne contient pas toutes les données nécessaires mais sait comment les obtenir.


Pour charger des données d'une base de données en mémoire, il est pratique de concevoir les choses de sorte que lorsque vous chargez un objet d'intérêt, vous chargez également les objets qui lui sont liés. Cela facilite le chargement pour le développeur utilisant l'objet, qui doit sinon charger explicitement tous les objets dont il a besoin.

Cependant, en conclusion logique, vous arrivez au point où le chargement d'un objet peut avoir pour effet de charger un grand nombre d'objets liés, ce qui nuit aux performances lorsque seuls quelques objets sont réellement nécessaires.

Un chargement différé interrompt ce processus de chargement pour le moment, laissant un marqueur dans la structure de l'objet de sorte que lorsque les données sont nécessaires, elles ne puissent être chargées que lorsqu'elles sont utilisées. Si vous évitez de faire des choses, cela devient un gain quand il s'avère que vous n'avez pas du tout besoin de les faire.

Il existe quatre principales variétés de chargement différé/paresseux :

  • L'initialisation différée utilise une valeur de marqueur spéciale (généralement nulle) pour indiquer qu'un champ n'est pas chargé. Chaque accès au champ vérifie si le champ vaut le marqueur et s'il est déchargé, le charge.
  • Le proxy virtuel est un objet avec la même interface que l'objet réel. La première fois qu'une de ses méthodes est appelée, elle charge l'objet réel puis délègue (voir Proxy).
  • Le détenteur de valeur est un objet avec une méthode getValue. Les clients appellent getValue pour obtenir l'objet réel, le premier appel déclenche le chargement.
  • Un fantôme est l'objet réel sans aucune donnée. La première fois que vous appelez une méthode, le fantôme charge les données complètes dans ses champs.

Ces approches varient quelque peu subtilement et comportent divers compromis. Vous pouvez également utiliser des approches combinées.