Heim > Web-Frontend > js-Tutorial > Hauptteil

Beispielanalyse gängiger grundlegender Entwurfsmuster in Node.js

小云云
Freigeben: 2018-02-08 10:47:32
Original
1519 Leute haben es durchsucht

Im Allgemeinen sind wir mit den Entwurfsmustern (Beobachtern) oder Fabriken (Fabrikmethoden) in Node.js vertraut. Dieser Artikel konzentriert sich auf die Einführung der Implementierungsmethoden einiger grundlegender Muster in Node.JS. Interessierte Freunde können dem Editor von Script folgen Lassen Sie uns gemeinsam lernen. In diesem Artikel werden sie nicht speziell besprochen. Ich diskutiere nur die Implementierung einiger grundlegender Muster in Node.JS, wie z. B. Abhängigkeitsinjektion oder Middleware. Ich hoffe, dass es allen helfen kann.

Was sind Designmuster?

Entwurfsmuster sind wiederverwendbare Lösungen zur Lösung allgemeiner, häufig auftretender Probleme.

Singletons (Singleton)

Das Singletons-Muster beschränkt die „Klasse“ auf nur eine Instanz. Das Erstellen eines Singletons in Node.js ist sehr einfach, wie beispielsweise unten beschrieben.

//area.js
var PI = Math.PI;
function circle (radius) { 
 return radius * radius * PI;
}
module.exports.circle = circle;
Nach dem Login kopieren

Es spielt keine Rolle, wie oft Sie darauf verweisen; es wird nur als einzelne Instanz existieren.

var areaCalc = require('./area');
console.log(areaCalc.circle(5));
Nach dem Login kopieren

Singletons sind aufgrund dieser Implementierung von require wahrscheinlich das häufigste Node.js-Entwurfsmuster in NPM-Modulen.

Beobachter

Ein Objekt, das eine Abhör-/Beobachtungsliste führt und sie automatisch benachrichtigt, wenn sich der Zustand ändert. Um das Beobachtermuster zu implementieren, ist EventEmitter praktisch.

// MyFancyObservable.js
var util = require('util'); 
var EventEmitter = require('events').EventEmitter;
function MyFancyObservable() { 
 EventEmitter.call(this);
}
util.inherits(MyFancyObservable, EventEmitter);
Nach dem Login kopieren

Das ist es; wir haben ein Observable implementiert! Um es zu verwenden, fügen wir einige Methoden hinzu.

MyFancyObservable.prototype.hello = function (name) { 
 this.emit('hello', name);
};
Nach dem Login kopieren

Großartig, versuchen Sie, diesem Ereignis zuzuhören und darauf zu reagieren!

var MyFancyObservable = require('MyFancyObservable'); 
var observable = new MyFancyObservable();
observable.on('hello', function (name) { 
 console.log(name);
});
observable.hello('john');
Nach dem Login kopieren

Factorys (Factory-Methode)

Factory-Muster ist ein Erstellermuster, das keine Verwendung von Konstruktoren erfordert. Es bietet eine gemeinsame Schnittstelle zum Erstellen von Objekten. Dieses Muster kann verwendet werden, um Objekte zu generieren, deren Erstellung sehr komplex ist.

function MyClass (options) { 
 this.options = options;
}
function create(options) { 
 // modify the options here if you want
 return new MyClass(options);
}
module.exports.create = create;
Nach dem Login kopieren

Factorys erleichtern das Testen, da Sie Abhängigkeiten in sie einfügen können.

Abhängigkeitsinjektion

Abhängigkeitsinjektion ist ein Entwurfsmuster, bei dem eine oder mehrere Abhängigkeiten (oder Dienste) injiziert oder durch Verweis auf ein abhängiges Objekt übergeben werden.

In diesem Beispiel erstellen wir ein Benutzermodell, das die Datenbankabhängigkeiten abruft.

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;
Nach dem Login kopieren

Jetzt erstellen wir eine Instanz damit:

var db = require('./db');
var userModel = require('User')({ 
 db: db
});
Nach dem Login kopieren

Warum ist es nützlich? Dies erleichtert das Testen – wenn Sie Unit-Tests schreiben, können Sie gefälschte Datenbankinstanzen in das Modell einfügen.

Middlewares/Pipelines

Middleware ist ein leistungsstarkes und dennoch einfaches Konzept: Die Ausgabe einer Funktionseinheit ist die Eingabe der nächsten Funktionseinheit. Wenn Sie Express verwendet haben, haben Sie dieses Muster bereits verwendet.

Sehen wir uns an, wie Koa das macht:

app.use = function(fn){ 
 this.middleware.push(fn);
 return this;
};
Nach dem Login kopieren

Wenn Sie also eine Middleware hinzufügen, wird diese einfach in eine Middleware-Warteschlange verschoben. Aber was passiert, wenn eine Anfrage auf diesem Server eintrifft?

var i = middleware.length; 
while (i--) { 
 next = middleware[i].call(this, next);
}
Nach dem Login kopieren

Nichts Magisches – Ihre Middleware wird nacheinander aufgerufen.

Streams

Sie können Streams als spezielle Pipes behandeln. Es eignet sich besser für die Verarbeitung großer Datenströme, dh es handelt sich um Bytes und nicht um Objekte.

process.stdin.on('readable', function () { 
  var buf = process.stdin.read(3);
  console.dir(buf);
  process.stdin.read(0);
});
Nach dem Login kopieren

Detaillierte Erläuterung des Service-Locator-Musterbeispiels des PHP-Entwurfsmusters

Detaillierte Erläuterung des Delegationsmusters des PHP-Entwurfsmusters

Detaillierte Erläuterung des Memomusters von PHP-Entwurfsmustern

Das obige ist der detaillierte Inhalt vonBeispielanalyse gängiger grundlegender Entwurfsmuster in Node.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage