1
resposta

Qual o melhor jeito de exportar o controller?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Isso vai mudar na hora de importar, caso use a primeira opção vai ter que fazer o "new", caso use a segunda opção basta importar e usar, é isso? Qual a melhor forma?

1 resposta

Olá Luidi.
Você está certo em perceber que o comportamento de importação muda dependendo de como você exporta o controller.
Vou tentar explicar um pouco mais sobre os dois casos e qual é o mais indicado.

1. module.exports = PessoaController:

Nesse caso, você está exportando a classe PessoaController diretamente.
Quando você importa essa classe em outro arquivo, você precisa criar uma nova instância da classe usando o new, como por exemplo:

const PessoaController = require('./PessoaController');
const pessoaController = new PessoaController();

2. module.exports = new PessoaController():

Aqui, você está exportando uma instância única da classe PessoaController.
Ou seja, o controller já está instanciado, e ao importá-lo, você já pode utilizá-lo diretamente, sem precisar usar o new:

const pessoaController = require('./PessoaController');
// Não é necessário o "new", já que o controller já está instanciado

Qual é a melhor forma?

Se você não precisa de estado ou lógica específica por instância (ou seja, se o controller não depende de dados específicos que mudam ao longo das requisições), a primeira abordagem, exportando a classe e criando novas instâncias quando necessário, é mais flexível e "limpa".
Você mantém um controle mais claro sobre como e quando cada instância do controller é criada.

  • Vantagens:
    • Mais flexível, caso você precise de múltiplas instâncias ou queira controlar a criação das instâncias.
    • Pode ser útil se você quiser adicionar lógica dentro do construtor da classe PessoaController.
  • Se o controller não precisa de estado e você vai usar a mesma instância em toda a aplicação, a segunda abordagem, exportando a instância já criada (new PessoaController()), pode ser mais simples, porque você não precisa se preocupar em criar uma nova instância toda vez que for usá-la.
    • Vantagens:
      • Código mais limpo, pois você não precisa instanciar a classe repetidamente.
      • Pode ser mais adequado para controladores simples que não mantêm estado.

Resumo:

  • Use module.exports = PessoaController quando for necessário criar instâncias do controller em diferentes partes do código ou se o controller tiver algum tipo de lógica no seu construtor.
  • Use module.exports = new PessoaController() quando quiser que a mesma instância seja usada em toda a aplicação e o controller não precisar de lógica específica para instâncias.
    Se você está criando uma API onde cada request pode ter seu próprio ciclo de vida e você precisa de controle fino sobre a instância de cada controller, o primeiro método (com new) é mais indicado.
    Já para uma API simples ou quando você sabe que a instância do controller será reutilizada, o segundo método pode ser mais direto e fácil de implementar.
    Resumindo não há certo ou errado e tudo depende do contexto que vai ser utilizado.
    Qualquer duvida comente ai.
    Bons estudos.