Node.js의 일반적인 기본 디자인 패턴 분석 예

小云云
풀어 주다: 2018-02-08 10:47:32
원래의
1519명이 탐색했습니다.

일반적으로 우리는 Node.js의 디자인 패턴(관찰자)이나 팩토리(팩토리 메소드)에 익숙합니다. 이 기사에서는 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

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

process.stdin.on('readable', function () { 
  var buf = process.stdin.read(3);
  console.dir(buf);
  process.stdin.read(0);
});
로그인 후 복사

PHP 디자인 패턴의 서비스 로케이터 패턴 예에 대한 자세한 설명

PHP 디자인 패턴의 위임 패턴에 대한 자세한 설명

PHP 디자인 패턴의 메모 패턴에 대한 자세한 설명

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

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿