Service
A camada de serviço (Service) é responsável por concentrar as regras de negócio da aplicação. Ela atua como uma ponte entre a interface da aplicação (como controllers ou APIs) e os repositórios, garantindo que todas as operações sigam as regras definidas antes de acessar o banco de dados.
Em outras palavras, enquanto o repositório se preocupa com o como os dados são manipulados, o service define o que deve ser feito e como deve ser validado.
Exemplo de implementação para a entidade Musica:
import { Musica } from "../entity/Musica";
import { MusicaRepository } from "../repository/MusicaRepository";
export class MusicaService {
private repository: MusicaRepository;
constructor() {
this.repository = new MusicaRepository();
}
async cadastrar(nome: string, duracao: number): Promise<Musica> {
const musica = new Musica(nome, duracao);
return await this.repository.criar(musica);
}
async listarTodos(): Promise<Musica[]> {
return await this.repository.listar();
}
async buscar(id: number): Promise<Musica | null> {
return await this.repository.buscarPorId(id);
}
async excluir(id: number): Promise<void> {
return await this.repository.remover(id);
}
}
O service concentra validações, transformações de dados e regras de negócio antes de delegar operações ao repositório. Ele oferece uma interface consistente para a aplicação, sem expor diretamente os detalhes do banco de dados.
Manter a lógica de negócio separada do repositório facilita manutenção, testes unitários e futuras alterações na aplicação. É comum que serviços invoquem múltiplos repositórios quando uma operação envolve várias entidades, sem quebrar a lógica de cada uma.