Aplicando o Padrão Singleton no NestJS

Cláudio Rapôso
3 min readApr 26, 2023

Introdução

O NestJS é um framework avançado e escalável para a construção de aplicativos eficientes e confiáveis em Node.js. Ele usa o paradigma de programação orientada a objetos, facilitando a criação de aplicativos modulares e reutilizáveis. Um dos padrões de projeto mais comuns e úteis na programação orientada a objetos é o Singleton.

Neste artigo, mostraremos como aplicar o padrão Singleton no NestJS, garantindo que uma classe tenha apenas uma instância e fornecendo um ponto de acesso global a essa instância.

O que é o padrão Singleton?

O Singleton é um padrão de projeto que garante que uma classe tenha apenas uma instância única e fornece um ponto de acesso global a essa instância. Isso é útil quando precisamos de um recurso compartilhado em todo o aplicativo, como um gerenciador de configurações ou uma conexão com o banco de dados.

Implementando o Singleton no NestJS

Para ilustrar a implementação do padrão Singleton no NestJS, criaremos um serviço de gerenciamento de configurações. Esse serviço será responsável por carregar as configurações do aplicativo e fornecer acesso a essas configurações.

Passo 1. Crie um novo serviço:

nest generate service configuration

Passo 2. Implemente a classe ConfigurationService como um Singleton:

// configuration.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class ConfigurationService {
private static instance: ConfigurationService;
private readonly config: Record<string, any>;

private constructor() {
this.config = {
// Carregue suas configurações aqui
};
}

public static getInstance(): ConfigurationService {
if (!ConfigurationService.instance) {
ConfigurationService.instance = new ConfigurationService();
}

return ConfigurationService.instance;
}

public getConfig(key: string): any {
return this.config[key];
}
}

Neste exemplo, usamos uma variável estática instance para armazenar a instância única da classe ConfigurationService. O construtor é privado, garantindo que a classe só possa ser instanciada de dentro. A função pública getInstance() é usada para obter a instância única da classe, criando-a se ainda não existir.

Passo 3. Use o Singleton no seu aplicativo:

Agora que temos nosso serviço Singleton implementado, podemos usá-lo em outros módulos e componentes do aplicativo.

// app.module.ts
import { Module } from '@nestjs/common';
import { ConfigurationService } from './configuration/configuration.service';

@Module({
providers: [
{
provide: ConfigurationService,
useValue: ConfigurationService.getInstance(),
},
],
})
export class AppModule {}

// app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { ConfigurationService } from './configuration/configuration.service';

@Controller()
export class AppController {
constructor(private readonly configService: ConfigurationService) {}

@Get('config')
getConfig(): Record<string, any> {
return this.configService.getConfig('exampleConfig');
}
}

Conclusão

Neste artigo, vimos como aplicar o padrão Singleton no NestJS de forma simples e eficaz. O padrão Singleton é uma excelente maneira de gerenciar instâncias únicas de serviços em sua aplicação, mantendo a estrutura de código organizada e escalável.

Lembre-se de que o NestJS é um framework poderoso que nos oferece várias ferramentas e recursos, e é importante escolher o padrão de design adequado para cada cenário específico. Com o conhecimento adquirido neste artigo, você está pronto para aplicar o padrão Singleton em suas aplicações NestJS e melhorar a qualidade do seu código.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Cláudio Rapôso
Cláudio Rapôso

Written by Cláudio Rapôso

Microsoft MVP | Software Architect | Teacher | Book Author | MCT | 12x Microsoft Certified Connect with me in https://www.linkedin.com/in/cfraposo

No responses yet

What are your thoughts?

Recommended from Medium

Lists

See more recommendations