Entendendo Controllers, Services e Repositories em Aplicações Node.js com TypeScript
TypeScript
Ao desenvolver aplicações web utilizando Node.js com TypeScript, é comum empregar uma arquitetura de código bem estruturada para facilitar a manutenção e o desenvolvimento. Três conceitos fundamentais para essa arquitetura são controllers, services e repositories.
Controllers
Os controllers são responsáveis por receber as requisições HTTP, interpretá-las e chamar as funções adequadas dos serviços correspondentes. Eles lidam com a entrada e saída da aplicação, mapeando os endpoints da API para as funções apropriadas. Em um contexto RESTful, um controller seria responsável por cada rota da API.
Exemplo de um controller em TypeScript:
import { Request, Response } from 'express';
import { UserService } from '../services/UserService';
export class UserController {
private userService: UserService;
constructor() {
this.userService = new UserService();
}
public async getUsers(req: Request, res: Response): Promise<void> {
const users = await this.userService.getAllUsers();
res.json(users);
}
// Outros métodos do controller...
Services
Os services são responsáveis pela lógica de negócios da aplicação. Eles encapsulam as operações relacionadas a um determinado recurso ou entidade, fornecendo uma abstração para as operações de acesso a dados e implementando regras de negócio. Os controllers chamam os métodos dos services para realizar as operações necessárias.
Exemplo de um service em TypeScript:
import { UserRepository } from '../repositories/UserRepository';
import { User } from '../models/User';
export class UserService {
private userRepository: UserRepository;
constructor() {
this.userRepository = new UserRepository();
}
public async getAllUsers(): Promise<User[]> {
return this.userRepository.findAll();
}
// Outros métodos do service...
}
Repositories
Os repositories são responsáveis por lidar com a persistência de dados da aplicação. Eles fornecem métodos para acessar e manipular os dados armazenados em um banco de dados ou qualquer outra fonte de dados. Os services utilizam os métodos dos repositories para recuperar e armazenar os dados conforme necessário.
Exemplo de um repository em TypeScript:
import { User } from '../models/User';
export class UserRepository {
public async findAll(): Promise<User[]> {
// Lógica para recuperar todos os usuários do banco de dados
}
// Outros métodos do repository...
}
Conclusão
Em resumo, controllers, services e repositories são componentes essenciais para uma arquitetura de aplicação bem estruturada em Node.js com TypeScript. Os controllers lidam com as requisições HTTP, os services encapsulam a lógica de negócios e os repositories lidam com a persistência de dados. Separar essas responsabilidades ajuda a manter o código organizado, modular e fácil de dar manutenção.