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.