Les proxy (utilisation basique)

La délégation des variables JS (Proxy) - Utilisation Basique

où comment ne plus se préocuper des changements récurents

Problèmatique

En JavaScript, manipuler des objets implique souvent d'accéder ou de modifier leurs propriétés. Cependant, il peut être difficile de suivre les accès ou d'ajouter des contrôles sans modifier directement l'objet.

Définition

Un Proxy est un objet intermédiaire à qui l'on délègue les différents états des propriétés d'un autre objet. Il peut ainsi intercepter et contrôler l'accès aux propriétés de l'objet, sans modifier son implémentation.

Mise en contexte

Imaginons un cas concret : nous avons un objet représentant un utilisateur, et souhaitons savoir à quel moment certaines données sont consultées.

  • const user={
    • name:'Paul',
    • mail:'paul@mail.com',
    • role:'admin'
  • }

On veut pouvoir déterminer quand l'utilisateur 'Paul' accède à certaines données

Première approche

La solution la plus simple serait d'ajouter des getters directement à la const User

  • const user={
    • name:'Paul',
    • mail:'paul@mail.com',
    • role:'admin'
    • getName(){
      • //ici la fonction de controle
      • return this.name;
      }
    • [...]
  • }
  • console.log(user.getName()); // Accès à la propriété 'name'
  • console.log(user.name); // Aucun suivi de l'accès ici !
Quels problèmes liés à cette approche

C'est là que les Proxy en JavaScript entre en jeux !

Implémentation

Le Handler

Première étape : Créer un handler dont le rôle sera d'intercepter l'accès aux propriétés de l'objet.

Ici on va se servir du get qui prend en paramètre l'objet de référence et la propriété observée.

  • const handler={
    • get(target, property) {
      • //ici les contrôles d'accès type Log ...
      • console.log(`Accès à la propriété "${property}" : ${target[property]}`);
      • return target[property]; // Retourne la valeur de la propriété demandée
    • }
  • }
A quoi sert cette fonction

Le Proxy

Maintenant que nous avons notre handler, nous allons pouvoir déléguer les données de user à un Proxy

  • const userProxy=new Proxy(user,handler);
Comment ça marche ?

Utilisation

A présent, nous n'allons plus nous servir de User mais de userProxy pour accèder au données.

  • alert(userProxy.name);
  • //Affichera dans la console : 'Accès à la propriété "name" : Paul'

Pourquoi utiliser un Proxy ?

  1. Évite d'écrire des getters manuels pour chaque propriété.
  2. Permet d'enregistrer les accès ou de bloquer certaines actions.
  3. Ajoute une couche de sécurité sans modifier l'objet d'origine.
  4. Fonctionne avec toutes les propriétés sans devoir les connaître à l'avance.
Partager
Partager sur Twitter