Heim > Web-Frontend > js-Tutorial > Hauptteil

Einführung in gängige grundlegende Designmuster in Node.js

巴扎黑
Freigeben: 2017-09-20 09:25:37
Original
1542 Leute haben es durchsucht

Das erste, woran jeder denkt, wenn er über Designmuster spricht, sind Singletons, Beobachter (Beobachter) oder Fabriken (Fabrikmethoden). Dieser Artikel konzentriert sich darauf, Ihnen die Implementierungsmethoden einiger grundlegender Muster in Node.JS vorzustellen. Interessierte Freunde können dem Herausgeber von Script House folgen, um gemeinsam zu lernen.

Wenn es um Designmuster geht, denken Sie vielleicht darüber nach Singletons, Beobachter (Beobachter) Oder Fabriken (Fabrikmethoden). In diesem Artikel werden sie nicht speziell besprochen. Erkunden Sie einfach die Implementierung einiger grundlegender Muster in Node.JS, wie z. B. Abhängigkeitsinjektion oder Middleware.

Was sind Designmuster?

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

Singletons (Singleton)

Das Singletons-Muster beschränkt eine „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

Fabriken (Fabrikmethode)

Fabrikmuster sind ein Schöpfermuster, das sind wir Die Verwendung des Konstruktors ist nicht erforderlich, er 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 besteht darin, eine oder mehrere Abhängigkeiten (oder Dienste) in das Designmuster für abhängige Objekte einzufügen.

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 Ausgabe der nächsten Eingabe an die Funktionseinheit. Wenn Sie Express verwendet haben, haben Sie dieses Muster bereits verwendet.

Schauen 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 unterdrückt. 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

Das obige ist der detaillierte Inhalt vonEinführung in gängige grundlegende Designmuster 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
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!