Heim  >  Artikel  >  Web-Frontend  >  Einführung in gängige grundlegende Designmuster in Node.js

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

巴扎黑
巴扎黑Original
2017-09-20 09:25:371574Durchsuche

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;

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));

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);

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);
};

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');

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;

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;

Jetzt erstellen wir eine Instanz damit:


var db = require('./db');
var userModel = require('User')({ 
 db: db
});

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;
};

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);
}

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);
});

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!

Stellungnahme:
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