Maison > interface Web > js tutoriel > le corps du texte

Exemple d'analyse de modèles de conception de base courants dans Node.js

小云云
Libérer: 2018-02-08 10:47:32
original
1519 Les gens l'ont consulté

En général, nous connaissons les modèles de conception (observateurs) ou les usines (méthodes d'usine) dans Node.js. Cet article se concentre sur l'introduction des méthodes d'implémentation de certains modèles de base dans Node.JS. Les amis intéressés peuvent suivre l'éditeur de Script. Maison Apprenons ensemble, cet article n’en parle pas spécifiquement. Je viens de discuter de l'implémentation de certains modèles de base dans Node.JS, tels que l'injection de dépendances ou le middleware, j'espère que cela pourra aider tout le monde.

Que sont les modèles de conception ?

Les modèles de conception sont des solutions réutilisables utilisées pour résoudre des problèmes généraux et courants.

Singletons (Singleton)

Le modèle Singletons limite la "classe" à une seule instance. Créer un singleton dans Node.js est très simple, comme le requiert ci-dessous.

//area.js
var PI = Math.PI;
function circle (radius) { 
 return radius * radius * PI;
}
module.exports.circle = circle;
Copier après la connexion

Peu importe le nombre de fois que vous le référencez ; il n'existera que sous la forme d'une seule instance.

var areaCalc = require('./area');
console.log(areaCalc.circle(5));
Copier après la connexion

Les singletons sont probablement le modèle de conception Node.js le plus courant dans les modules NPM en raison de cette implémentation de require .

Observateurs

Un objet qui maintient une liste d'écoute/observation et les avertit automatiquement lorsque l'état change. Afin d'implémenter le modèle d'observateur, EventEmitter est utile.

// MyFancyObservable.js
var util = require('util'); 
var EventEmitter = require('events').EventEmitter;
function MyFancyObservable() { 
 EventEmitter.call(this);
}
util.inherits(MyFancyObservable, EventEmitter);
Copier après la connexion

Ça y est, nous avons implémenté un observable ! Pour l'utiliser, ajoutons quelques méthodes.

MyFancyObservable.prototype.hello = function (name) { 
 this.emit('hello', name);
};
Copier après la connexion

Super, essayez d'écouter et de répondre à cet événement !

var MyFancyObservable = require('MyFancyObservable'); 
var observable = new MyFancyObservable();
observable.on('hello', function (name) { 
 console.log(name);
});
observable.hello('john');
Copier après la connexion

Factory (méthode factory)

Le modèle Factory est un modèle de créateur qui ne nous oblige pas à utiliser des constructeurs. Il fournit une interface commune pour créer des objets. Ce modèle peut être utilisé pour générer des objets très complexes à créer.

function MyClass (options) { 
 this.options = options;
}
function create(options) { 
 // modify the options here if you want
 return new MyClass(options);
}
module.exports.create = create;
Copier après la connexion

Les usines facilitent les tests car vous pouvez y injecter des dépendances.

Injection de dépendances

L'injection de dépendances est un modèle de conception dans lequel une ou plusieurs dépendances (ou services) sont injectées ou transmises par référence à un objet dépendant.

Dans cet exemple, nous allons créer un modèle utilisateur qui récupère les dépendances de la base de données.

function userModel (options) { 
 var db;
 if (!options.db) {
  throw new Error('Options.db is required');
 }
 db = options.db;
 return {
  create: function (done) {
   db.query('INSERT ...', done);
  }
 }
}
module.exports = userModel;
Copier après la connexion

Maintenant, créons une instance en l'utilisant :

var db = require('./db');
var userModel = require('User')({ 
 db: db
});
Copier après la connexion

Pourquoi est-ce utile ? Cela facilite les tests : lorsque vous écrivez des tests unitaires, vous pouvez injecter de fausses instances de base de données dans le modèle.

Middlewares/pipelines

Le middleware est un concept puissant mais simple : la sortie d'une unité fonctionnelle est l'entrée de l'unité fonctionnelle suivante. Si vous avez utilisé Express, vous avez déjà utilisé ce modèle.

Voyons comment Koa procède :

app.use = function(fn){ 
 this.middleware.push(fn);
 return this;
};
Copier après la connexion

Donc, fondamentalement, lorsque vous ajoutez un middleware, il est simplement placé dans une file d'attente de middleware. Mais que se passe-t-il lorsqu'une requête arrive sur ce serveur ?

var i = middleware.length; 
while (i--) { 
 next = middleware[i].call(this, next);
}
Copier après la connexion

Rien de magique, vos middlewares sont appelés les uns après les autres.

Flux

Vous pouvez traiter les flux comme des canaux spéciaux. Il est plus adapté au traitement de flux de données volumineux, c'est-à-dire qu'il s'agit d'octets et non d'objets.

process.stdin.on('readable', function () { 
  var buf = process.stdin.read(3);
  console.dir(buf);
  process.stdin.read(0);
});
Copier après la connexion

Explication détaillée de l'exemple de modèle de localisateur de service du modèle de conception PHP

Explication détaillée du modèle de délégation du modèle de conception PHP

Explication détaillée du modèle de mémo du modèle de conception PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal