Usando classes ES6 OU Literais de Objeto em controladores para um aplicativo Express + NodeJS
Há duas coisas sobre as quais estou muito confuso.
Qual é a vantagem de usar qualquer classe ES6 ou literal de objeto.
E onde devo usar algum deles?
Alguns dos exemplos que estou testando são mencionados abaixo. Informe-me quando usar um modo específico de implementação e quando não usar.
Exemplo de classe 1:
// auth.js
class Auth {
login(req, res) {...}
signup(req, res) {...}
}
module.exports = new Auth();
// index.js
const auth = require('auth');
Exemplo de Classe 2:
// auth.js
class Auth {
login(req, res) {...}
signup(req, res) {...}
}
module.exports = Auth;
// index.js
const Auth = require('auth');
const auth = new Auth();
Exemplo literal de objeto:
// auth.js
module.exports = {
login: (req, res) => {...},
signup: (req, res) => {...}
};
// index.js
const auth = require('auth');
O que penso ao ler sobre eles é o seguinte:
Exemplo de classe 1:
Você não pode criar mais de um objeto. Porque um módulo é executado apenas uma vez. Portanto, em cada importação, você obterá o mesmo objeto. Algo semelhante ao singleton. (Corrija-me aqui se eu entendi errado)
Você não poderá acessar os métodos estáticos da classe porque está exportando apenas o objeto da classe.
Exemplo de Classe 2:
Se você tem uma classe que não contém nada além de métodos auxiliares e o objeto não possui nenhum estado, não faz sentido criar objetos dessa classe o tempo todo. Portanto, no caso de classes auxiliares, isso não deve ser usado.Exemplo literal de objeto:
Você não pode fazer herança.
O mesmo objeto será repassado a cada requisito. (Corrija-me se eu estiver errado aqui também)
Por favor, ajude-me a entender esses conceitos, o que estou perdendo, o que entendi mal e o que deve ser usado quando e onde. Ficarei muito grato por sua ajuda.
Sinta-se livre para editar a pergunta, se você acha que cometi um erro em algum lugar.