Aplicando o Padrão Singleton no NestJS
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.