Accueil Technologie
Comment utiliser les modèles de conception JavaScript

Comment utiliser les modèles de conception JavaScript

Comment utiliser les modèles de conception JavaScript

Les modèles de conception JavaScript fournissent des solutions éprouvées à des problèmes courants dans le développement de logiciels. La compréhension et l’application de ces modèles vous permettront d’écrire un code JavaScript meilleur et plus efficace.


Introduction aux patrons de conception JavaScript

Les concepts contenus dans les modèles de conception JavaScript servent à vous guider sur la manière de résoudre les problèmes courants auxquels vous serez confronté en tant que développeur JavaScript.

Vous devez comprendre les abstractions sous-jacentes aux modèles, afin de pouvoir les appliquer à votre problème particulier. Vous devez également être en mesure d’identifier quand l’un de ces modèles peut être utile à votre code.

Le modèle du module

Le modèle Module, qui permet l’encapsulation, fait partie du système de modules de JavaScript. Il permet de sécuriser les données et les comportements privés au sein d’un module tout en exposant une API publique. Il vous permet de créer des objets de module autonomes avec des niveaux d’accès privés et publics.

Cela ressemble un peu à la façon dont vous pouvez utiliser des modificateurs d’accès sur une classe dans un langage comme Java ou C++.

En JavaScript, il est possible d’implémenter le modèle Module en utilisant des fermetures.

En utilisant une fermeture pour enfermer des membres privés (fonctions, variables, données), vous créez un espace où ces membres sont accessibles mais pas directement exposés au monde extérieur. Cela permet de réaliser l’encapsulation, en gardant les détails internes cachés au code externe.

En outre, le fait de renvoyer une API publique à partir de la fermeture permet un accès privé à certaines fonctions ou propriétés que vous souhaitez exposer dans le cadre de l’interface du module.

Cela vous permettra de contrôler quelles parties du module sont accessibles à d’autres parties de la base de code. Cela permet de maintenir une frontière claire entre les fonctionnalités publiques et privées.

Voici un exemple :

 const ShoppingCartModule = (function () {
  // Private data
  let cartItems = [];

  // Private method
  function calculateTotalItems() {
    return cartItems.reduce((total, item) => total + item.quantity, 0);
  }

  // Public API
  return {
    addItem(item) {
      cartItems.push(item);
    },

    getTotalItems() {
      return calculateTotalItems();
    },

    clearCart() {
      cartItems = [];
    }
  };
})();

// Usage example
ShoppingCartModule.addItem({ name: 'Product 1', quantity: 2 });
ShoppingCartModule.addItem({ name: 'Product 2', quantity: 1 });

console.log(ShoppingCartModule.getTotalItems()); // Output: 3

ShoppingCartModule.clearCart();
console.log(ShoppingCartModule.getTotalItems()); // Output: 0

Dans cet exemple, le ShoppingCartModule représente un module créé à l’aide du modèle de module. L’exécution du code se déroule comme suit :

  1. L’IIFE enveloppe l’ensemble du bloc de code, créant une fonction qui est immédiatement exécutée lors de la déclaration. Cela établit une portée privée pour les membres du module.
  2. cartItems est un tableau privé. Il n’est pas directement accessible depuis l’extérieur du module.
  3. calculateTotalItems() est une méthode privée qui calcule le nombre total d’articles dans le panier. Elle utilise la valeur reduce() pour itérer sur la liste des articles du panier et additionner les quantités de tous les articles.
  4. Le module renvoie son API publique sous la forme d’un objet littéral, exposant trois méthodes publiques : addItem(), getTotalItems()et clearCart().
  5. En dehors du module, vous pouvez accéder aux méthodes publiques du module pour interagir avec la fonctionnalité du panier d’achat.

Cet exemple montre comment le modèle du module permet d’encapsuler des données privées (cartItems) et le comportement (calculerTotalItems) dans le module tout en fournissant une interface publique (addItem, getTotalItemset clearCart) pour interagir avec le module.

Le modèle de l’observateur

Le modèle de l’observateur établit une dépendance d’un à plusieurs entre les objets. Lorsque l’état d’un objet change, il en informe tous ses dépendants, qui se mettent à jour automatiquement. Ce modèle est particulièrement utile pour gérer les interactions événementielles ou pour découpler les composants d’un système.

En JavaScript, vous pouvez mettre en œuvre le modèle Observer à l’aide de la fonction intégrée addEventListener, dispatchEvent ou tout autre mécanisme de gestion des événements. En abonnant des observateurs à des événements ou à des sujets, vous pouvez les notifier et les mettre à jour lorsque des événements spécifiques se produisent.

Par exemple, vous pouvez utiliser le modèle Observer pour mettre en œuvre un système de notification simple :

 // Observer pattern implementation
function NotificationSystem() {
  // List of subscribers
  this.subscribers = [];

  // Method to subscribe to notifications
  this.subscribe = function (subscriber) {
    this.subscribers.push(subscriber);
  };

  // Method to unsubscribe from notifications
  this.unsubscribe = function (subscriber) {
    const index = this.subscribers.indexOf(subscriber);

    if (index !== -1) {
      this.subscribers.splice(index, 1);
    }
  };

  // Method to notify subscribers
  this.notify = function (message) {
    this.subscribers.forEach(function (subscriber) {
      subscriber.receiveNotification(message);
    });
  };
}

// Subscriber object
function Subscriber(name) {
  // Method to receive and handle notifications
  this.receiveNotification = function (message) {
    console.log(name + ' received notification: ' + message);
  };
}

// Usage example
const notificationSystem = new NotificationSystem();

// Create subscribers
const subscriber1 = new Subscriber('Subscriber 1');
const subscriber2 = new Subscriber('Subscriber 2');

// Subscribe subscribers to the notification system
notificationSystem.subscribe(subscriber1);
notificationSystem.subscribe(subscriber2);

// Notify subscribers
notificationSystem.notify('New notification!');

L’objectif ici est de permettre à plusieurs abonnés de recevoir des notifications lorsqu’un événement spécifique se produit.

L’outil Système de notification représente le système qui envoie les notifications, et la fonction Abonné représente les destinataires des notifications.

Le NotificationSystem possède un tableau appelé abonnés pour stocker les abonnés qui souhaitent recevoir des notifications. Les s’abonner permet aux abonnés de s’enregistrer en s’ajoutant au tableau des abonnés. La méthode se désinscrire supprimerait les abonnés du tableau.

La méthode aviser de NotificationSystem parcourt le tableau des abonnés et appelle la méthode recevoirNotification sur chaque abonné, ce qui leur permet de gérer les notifications.

Les instances de la fonction Subscriber représentent les abonnés. Chaque abonné dispose d’une méthode receiveNotification qui détermine la manière dont il traite les notifications reçues. Dans cet exemple, la méthode enregistre le message reçu dans la console.

Pour utiliser le modèle d’observateur, créez une instance de NotificationSystem. Vous pouvez ensuite créer des instances de Subscriber et les ajouter au système de notification à l’aide de la méthode subscribe.

L’envoi d’une notification déclenche la méthode receiveNotification pour chaque abonné et enregistre le message pour chaque abonné.

Le modèle de l’observateur permet un couplage lâche entre le système de notification et les abonnés, ce qui permet une certaine souplesse. Il favorise la séparation des préoccupations, ce qui facilite la maintenance des systèmes événementiels.

Utilisation de modèles JavaScript avancés

Voici quelques conseils généraux pour utiliser efficacement les modèles JavaScript avancés :

  • Tenir compte des implications en termes de performances : Les modèles avancés peuvent introduire une complexité supplémentaire, ce qui peut avoir un impact sur les performances. Tenez compte des conséquences sur les performances et optimisez-les si nécessaire.
  • Éviter les anti-modèles : Comprenez parfaitement les modèles et évitez de tomber dans des anti-modèles ou de les utiliser à mauvais escient. Utilisez les modèles lorsqu’ils ont un sens et qu’ils correspondent aux besoins de votre application.
  • Suivre les conventions de codage : Suivez systématiquement les conventions de codage pour maintenir la lisibilité et la cohérence de votre base de code. Utilisez des noms de variables et de fonctions significatifs et fournissez une documentation claire pour vos modèles.

Soyez prudent lors de l’application de ces modèles

Le modèle Module permet l’encapsulation et favorise la confidentialité des données, l’organisation du code et la création de modules autonomes.

D’autre part, le modèle Observer facilite la communication entre les composants en établissant une relation sujet-souscripteur.

Vous devez être conscient des pièges potentiels et des erreurs courantes lorsque vous mettez en œuvre des modèles JavaScript avancés. Évitez de surutiliser des modèles lorsqu’il existe des solutions plus simples ou de créer un code trop complexe. Révisez et remaniez régulièrement votre code pour vous assurer qu’il reste maintenable.

Leave your vote

0 0 votes
Évaluation de l'article
S’abonner
Notification pour
guest
0 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires

Log In

Forgot password?

Don't have an account? Register

Forgot password?

Enter your account data and we will send you a link to reset your password.

Your password reset link appears to be invalid or expired.

Log in

Privacy Policy

Add to Collection

No Collections

Here you'll find all collections you've created before.

0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x