Service Layer: Separando Regras de Negócio do CRUD

09/12/2025

Quando comecei a programar, eu fazia tudo nos controllers: validação, lógica de negócio, chamadas de banco… era rápido, parecia eficiente. Até o dia em que meu controller virou uma bagunça de 872 linhas e eu tive que debugar por 50 minutos a 1 hora só pra entender onde revalidava um campo e descia listas que não posso entrar com detalhes , enfim.

Foi aí que percebi: preciso separar as responsabilidades.

É aí que entra o Service Layer.

O que é Service Layer

Service Layer é uma camada que fica entre o controller e o modelo/DB, responsável por todas as regras de negócio.

-Controllers: só recebem requisição e retornam resposta.

-Services: fazem a mágica acontecer (validação complexa, lógica de negócio, integração com outros sistemas).

-Models/DB: cuidam apenas de persistir os dados.

Por que usar

Controllers limpos

Menos código repetido, mais legível.

-Regras centralizadas

Mudou a regra do negócio? Alterou no service, não em 10 controllers diferentes.

-Testes fáceis

Você testa o service isoladamente, sem depender do HTTP.

-Escalabilidade real

Quando o projeto cresce, já tem padrão de organização.

CONTROLLER ANTES-------------------------------------------------

public function store(Request $request) {

$request->validate([...]);

$user = new User();

$user->name = $request->name;

$user->email = $request->email;

$user->password = Hash::make($request->password);

$user->save();

return response()->json($user);

}

CONTROLLER DEPOIS--------------------------------

public function store(Request $request, UserService $service) {

$user = $service->createUser($request->all());

return response()->json($user);

}

SERVICE---------------------------------------------

class UserService {

public function createUser(array $data) {

$data['password'] = Hash::make($data['password']);

return User::create($data);

}

}

----------------------------------------------------

Quando usar

>CRUD simples em uma tabela só → controller dá conta.

>Regras complexas ou operações envolvendo múltiplos modelos → use service.

>Integrações externas (pagamento, APIs) → service vai te ajudar muito.

Não transforme tudo em service desde o começo. Comece simples, evolua conforme o sistema cresce.