デザイン パターンについて話すときに誰もが最初に考えるのは、シングルトン、オブザーバー (オブザーバー)、またはファクトリ (ファクトリー メソッド) です。この記事では、Node.JS のいくつかの基本パターンの実装方法を紹介することに重点を置いています。興味のある友達は、Script House のエディターをフォローして一緒に学ぶことができます
デザイン パターンというと、シングルトンやオブザーバーを思い浮かべるかもしれません。オブザーバー)またはファクトリー(工場)メソッド)。この記事では、それらについて具体的に説明しません。依存関係の注入やミドルウェアなど、Node.JS のいくつかの基本パターンの実装を調べてください。
デザインパターンとは何ですか?
デザイン パターンは、一般的でよく発生する問題を解決するために使用される再利用可能なソリューションです。
Singletons (シングルトン)
Singletons パターンは、「クラス」を 1 つのインスタンスのみに制限します。 Node.js でシングルトンを作成するのは非常に簡単です。たとえば、以下の例のようになります。
//area.js var PI = Math.PI; function circle (radius) { return radius * radius * PI; } module.exports.circle = circle;
何度参照しても、単一のインスタンスとしてのみ存在します。
var areaCalc = require('./area'); console.log(areaCalc.circle(5));
この require の実装により、シングルトンはおそらく NPM モジュールで最も一般的な Node.js 設計パターンになります。
Observers
リスニング/観察リストを維持し、状態が変化したときに自動的に通知するオブジェクト。オブザーバー パターンを実装するには、EventEmitter が便利です。
以上で、Observable を実装しました。これを使用するには、いくつかのメソッドを追加しましょう。
// MyFancyObservable.js var util = require('util'); var EventEmitter = require('events').EventEmitter; function MyFancyObservable() { EventEmitter.call(this); } util.inherits(MyFancyObservable, EventEmitter);
素晴らしいです。このイベントを聞いて応答してみてください。
MyFancyObservable.prototype.hello = function (name) { this.emit('hello', name); };
Factories (ファクトリメソッド)
ファクトリパターンは、コンストラクタを使用する必要のない、オブジェクトを作成するための共通のインターフェイスを提供します。このパターンは、作成が非常に複雑なオブジェクトを生成するために使用できます。
var MyFancyObservable = require('MyFancyObservable'); var observable = new MyFancyObservable(); observable.on('hello', function (name) { console.log(name); }); observable.hello('john');
ファクトリーを使用すると、依存関係を注入できるため、テストが容易になります。
依存関係の注入
依存関係の注入は、1 つ以上の依存関係 (またはサービス) が注入されるか、依存オブジェクトへの参照によって渡される設計パターンです。
この例では、データベースの依存関係を取得するユーザーモデルを作成します。
function MyClass (options) { this.options = options; } function create(options) { // modify the options here if you want return new MyClass(options); } module.exports.create = create;
それでは、それを使用してインスタンスを作成しましょう:
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;
なぜ便利なのでしょうか?これによりテストが容易になります。単体テストを作成するときに、偽のデータベース インスタンスをモデルに挿入できます。
ミドルウェア/パイプライン ミドルウェア/パイプライン
ミドルウェアは強力かつシンプルな概念です。つまり、1 つの機能ユニットの出力が次の機能ユニットの入力になります。 Express を使用したことがある場合は、すでにこのパターンを使用していることになります。
Koa がどのように行うかを見てみましょう:
var db = require('./db'); var userModel = require('User')({ db: db });
つまり、基本的にミドルウェアを追加すると、それはミドルウェア キューにプッシュされるだけです。しかし、リクエストがこのサーバーに到着すると何が起こるでしょうか?
app.use = function(fn){ this.middleware.push(fn); return this; };
魔法のようなものは何もありません - ミドルウェアは次々に呼び出されます。
ストリーム
ストリームを特別なパイプとして扱うことができます。これは、大きなデータ ストリーム、つまりオブジェクトではなくバイトを処理するのに適しています。
以上がNode.js の一般的な基本設計パターンの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。