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

Я упоминаю два подхода к созданию класса Singleton в экспресс-приложении NodeJS, пожалуйста, помогите мне понять несколько вещей об этих реализациях:

  • Подтвердите, если оба означают одно и то же - я думаю, да, потому что результаты одного и того же времени выполнения
  • Какой из них является предпочтительным способом кодирования
  • Есть ли разница в производительности
  • Любой другой лучший способ создания классов для контроллеров и оболочек базы данных в приложении 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)


Синглтон — это класс, который имеет только один экземпляр. 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;
};

Это лучший синглтон в node.js.

person vkurchatkin    schedule 14.10.2014
comment
Этот тип синглтона официально называется модулем в узле :-) - person Bergi; 15.10.2014

я предпочитаю второй подход, но я думаю, что одноэлементный класс - плохой шаблон проектирования - его сложно тестировать.

стоит отметить, что модули nodejs сами по себе являются синглтонами (поскольку они кэшируются, когда они требуются) - https://gist.github.com/vodolaz095/6201232

person vodolaz095    schedule 14.10.2014