Page cover

9.7.3 - Service Pattern (Padrão de Serviços)

O padrão Service (ou Service Layer) é uma prática muito comum no desenvolvimento de APIs para organizar melhor a lógica de negócio. Em vez de colocar toda a lógica diretamente nos controllers, ela é delegada para arquivos específicos chamados services.

🎯 Objetivo

Separar responsabilidades:

  • Controllers cuidam da requisição e resposta (entrada e saída).

  • Services cuidam da lógica do que deve ser feito (processamento e regras).


🔍 Exemplo prático

Suponha que você tenha um endpoint para registrar um novo usuário:

Controller (userController.js):

userController.js
const userService = require('../services/userService');

const registerUser = async (req, res) => {
  try {
    const result = await userService.register(req.body);
    res.status(201).json(result);
  } catch (err) {
    res.status(400).json({ error: err.message });
  }
};

Service (userService.js):

userService.js
const User = require('../models/userModel');

const register = async (userData) => {
  // Aqui ficaria toda a lógica de validação, regras, salvamento etc.
  const newUser = await User.create(userData);
  return newUser;
};

module.exports = { register };

✅ Vantagens

  • Organização: código mais limpo e separado por função.

  • Reutilização: serviços podem ser usados em outros lugares (ex: outro controller).

  • Testabilidade: facilita testes unitários, pois a lógica está isolada.

  • Escalabilidade: projetos maiores precisam dessa separação para manter clareza.

🤨 Mas o RESTful já não usa esse princípio?

RESTful não exige, mas encaixa perfeitamente com o uso de services.

A arquitetura REST define princípios de como estruturar os recursos e as operações HTTP (como GET, POST, PUT, DELETE). Ela foca na interface da API — ou seja, como o cliente interage com os dados.

Já o uso do Service Pattern é uma boa prática interna, voltada à organização do código do servidor. Ou seja:

  • REST cuida de como a API é usada.

  • Service Pattern cuida de como o código da API é organizado.

Last updated