2014-12-18 2 views
0

Я играю с Node и ES6, и я пытаюсь обернуть некоторые модули Node в классы (в данном случае bunyan). Целью является унификация того, как я использую модули (как мои, так и npm) в своем приложении (не уверен, что это хорошо).Использовать return in constructor для модуля узла упаковки

Я придумал рабочее решение с возвратом в конструкторе класса. Но я не уверен, что это хороший способ сделать это. Есть предположения ?

Вот что я делаю:

var bunyan = require('bunyan'); 

export default class Logger { 

    constructor(options) { 
    return bunyan.createLogger(options); 
    } 
}; 

Так я могу использовать его как это:

var logger = new Logger({name: "server.js"}); 
+1

http://www.2ality.com/2014/09/es6-modules-final.html – cbass

ответ

1

Это действительно вопрос мнения, но есть несколько (в основном) объективные точки должны быть сделаны:

Если вы сделаете это ...

  • Объект создается оператором new, а затем просто выброшен (при условии, что оптимизатор V8 не выясняет, что он может пропустить это).

  • Это довольно вводящим в заблуждение, что logger вы получите обратно есть не экземпляр Logger класса (logger instanceof Logger будет ложь). Возможность вернуть объект из конструктора для переопределения того, который создает new, в основном для возврата предыдущего экземпляра, созданного конструктором, который эквивалентен тому, который вы попросили (в основном для одиночных или неизменяемых объектов, чтобы избежать дублирования).

  • Использование new Logger скрывает тот факт, что то, что вы получаете, на самом деле является бунианским регистратором, который может отбрасывать людей, поддерживающих код.

Учитывайте ли вы, что эти «минусы» или нет, опять же вопрос мнения.

Альтернативой для Logger является bunyan logger вместо того, чтобы напрямую его возвращать. Это также будет иметь преимущество инкапсуляции, если вы решили обменять bunyan на что-то еще в будущем.

+0

Хорошо. Я увижу об обертывании Bunyan, когда мой объект вызовет его методы. Благодаря ! – arcane86