Създаване на Javascript Singleton клас в NodeJS

Споменавам два подхода за създаване на класа Singleton в приложението NodeJS express, моля, помогнете ми да разбера няколко неща за тези реализации:

  • Потвърдете, ако и двете означават едно и също - предполагам, че да, защото води до едно и също време на изпълнение
  • Кой е предпочитаният начин за кодиране
  • Има ли разлика в производителността
  • Всеки друг по-добър начин за създаване на класове за контролери и обвивки на бази данни в приложението NodeJS Express

Подход 1

(function (nameClass) {
    nameClass.name = 'John';
    nameClass.getName = function () {
        return nameClass.name;
    };
    nameClass.setName = function (newName) { 
        nameClass.name = newName;
    };
})(module.exports);

Подход 2

var fu = new function () {
    this.name = "John";
    this.getName = function () {
        return this.name;
    };
    this.setName = function (newName) { 
        this.name = newName;
    };
};
module.exports = fu;

person Manoj Aggarwal    schedule 14.10.2014    source източник
comment
Вторият всъщност не е сингълтън. Мисля, че това прави другия въпрос неуместен.   -  person Bergi    schedule 15.10.2014
comment
Забележете, че тъй като JS не е базиран на клас, но позволява инстанциране на обект без включен клас, терминът клас сингълтон е доста неподходящ за такъв самостоятелен обект (клас означава инстанцируем, което не е). Това е просто модул.   -  person Bergi    schedule 15.10.2014


Отговори (2)


Singleton е клас, който има само един екземпляр. Javascript няма класове. Разбира се, те могат да бъдат емулирани лесно с конструктори и прототипи и на всичкото отгоре можете да емулирате сингълтън, но за какво? Можете да създавате екземпляри директно.

Ако премахнете частите от кода си, които нямат смисъл, и двата подхода ще станат еднакви:

exports.name = "John";
exports.getName = function () {
    return this.name;
};
exports.setName = function (newName) { 
    this.name = newName;
};

Можете също да направите name "частен":

var name = "John";
exports.getName = function () {
    return name;
};
exports.setName = function (newName) { 
    name = newName;
};

Това е най-добрият "singleton" в node.js.

person vkurchatkin    schedule 14.10.2014
comment
Този тип сингълтън официално се нарича модул във възел :-) - person Bergi; 15.10.2014

предпочитам втория подход, но мисля, че класът singleton е лош модел на проектиране - трудно е да се тества единица.

заслужава да се отбележи, че модулите nodejs са сингълтони сами по себе си (защото се кешират, когато са необходими) - https://gist.github.com/vodolaz095/6201232

person vodolaz095    schedule 14.10.2014