>웹 프론트엔드 >JS 튜토리얼 >Node.js의 일반적인 기본 디자인 패턴 소개

Node.js의 일반적인 기본 디자인 패턴 소개

巴扎黑
巴扎黑원래의
2017-09-20 09:25:371630검색

디자인 패턴을 이야기할 때 누구나 가장 먼저 떠올리는 것은 싱글톤, 옵저버(관찰자) 또는 팩토리(팩토리 메소드)입니다. 이번 글은 Node.JS의 몇 가지 기본 패턴 구현 방법을 소개하는 데 중점을 두고 있습니다. 관심 있는 친구들은 Script House의 편집자를 따라가서 함께 배울 수 있습니다

디자인 패턴이라고 하면 싱글턴, 옵저버( 관찰자) 또는 팩토리(팩토리) 방법). 이 기사에서는 이에 대해 구체적으로 논의하지 않습니다. 종속성 주입이나 미들웨어와 같은 Node.JS의 몇 가지 기본 패턴 구현을 살펴보세요.

디자인 패턴이란 무엇인가요?

디자인 패턴은 일반적이고 일반적으로 발생하는 문제를 해결하는 데 사용되는 재사용 가능한 솔루션입니다.

싱글턴(Singleton)

싱글턴 패턴은 "클래스"를 하나의 인스턴스로만 제한합니다. 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가 유용합니다.


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

이제 Observable을 구현했습니다! 이를 사용하기 위해 몇 가지 메소드를 추가해 보겠습니다.


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

좋습니다. 이 이벤트를 듣고 응답해 보세요!


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

Factories(팩토리 메소드)

Factory 패턴은 생성자를 사용할 필요가 없는 생성자 패턴으로 객체 생성을 위한 공통 인터페이스를 제공합니다. 이 패턴은 생성하기 매우 복잡한 객체를 생성하는 데 사용할 수 있습니다.


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

Factory는 종속성을 주입할 수 있기 때문에 테스트를 더 쉽게 만듭니다.

종속성 주입

종속성 주입은 하나 이상의 종속성(또는 서비스)이 종속 개체에 대한 참조로 주입되거나 전달되는 디자인 패턴입니다.

이 예에서는 데이터베이스 종속성을 가져오는 사용자 모델을 생성합니다.


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;

이제 이를 사용하여 인스턴스를 만들어 보겠습니다.


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

이것이 왜 유용한가요? 테스트가 더 쉬워집니다. 단위 테스트를 작성할 때 가짜 데이터베이스 인스턴스를 모델에 삽입할 수 있습니다.

Middlewares/pipelines Middleware/pipelines

Middleware는 강력하면서도 단순한 개념입니다. 하나의 기능 단위의 출력은 다음 기능 단위의 입력이 됩니다. Express를 사용했다면 이미 이 패턴을 사용한 것입니다.

Koa가 어떻게 하는지 살펴보겠습니다.


app.use = function(fn){ 
 this.middleware.push(fn);
 return this;
};

기본적으로 미들웨어를 추가하면 미들웨어 대기열로 푸시됩니다. 하지만 이 서버에 요청이 도착하면 어떻게 될까요?


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

마법 같은 것은 없습니다. 미들웨어가 하나씩 호출됩니다.

Streams

스트림을 특수 파이프로 처리할 수 있습니다. 대규모 데이터 스트림, 즉 객체가 아닌 바이트를 처리하는 데 더 적합합니다.


rreee

위 내용은 Node.js의 일반적인 기본 디자인 패턴 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.