일반적으로 우리는 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 디자인 패턴의 서비스 로케이터 패턴 예에 대한 자세한 설명
위 내용은 Node.js의 일반적인 기본 디자인 패턴 분석 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!