Executando verificação de segurança...
1

Troquei Services por Actions no Laravel

No Laravel, é comum usar a classe Service para organizar regras de negócio, mas já me deparei com um problema: conforme o projeto cresce, esses services viram verdadeiros Frankensteins, cheios de métodos e difíceis de manter.

Passei por isso em um projeto onde desenvolvi uma API com vários endpoints dentro de um mesmo módulo. No início, manter tudo dentro de um único service parecia prático, mas conforme a lógica crescia, começou a ficar bem complicado dar manutenção. Eu precisava navegar por um arquivo enorme para encontrar o que precisava.

Pesquisando alternativas, encontrei a abordagem de Actions, que já estava sendo utilizada nos starter kits do Laravel. Como eu já costumava organizar os métodos dos services por ações, a adaptação foi tranquila: separei cada ação em uma classe própria e movi os métodos auxiliares para helpers ou outras Actions. No fim, o código ficou mais modular, mais legível e muito mais fácil de testar.

Essa abordagem lembra bastante os Use Cases da Clean Architecture e ajuda a aplicar SOLID, principalmente:
✅ SRP: Cada classe tem apenas uma responsabilidade.
✅ OCP: Para novas ações, basta criar uma nova Action sem alterar o código existente.
✅ DIP: As Actions podem depender de interfaces, facilitando testes e manutenção.

O único ponto negativo é que agora tenho mais arquivos para lidar, e em alguns momentos é chato ter vários deles abertos ao mesmo tempo. Mas, no geral, a organização e a escalabilidade compensam bastante.

Depois dessa experiência, passei a adotar Actions nos novos projetos e não me vejo mais voltando para Services tradicionais. E você, já usou Actions no Laravel? se você utiliza outra a bordagem compartilha aqui? 🚀

Carregando publicação patrocinada...
2

Fiz exatamente o inverso. Sempre utilizei actions com um método apenas, handle (like Laravel), porém com o tempo migrei para services e estou até então. Tem facilitado bastante a minha vida, pois utilizo a mesma classe método para controller no blade, livewire e api.

1

Pq cara hehehe, brincadeira, na verdade essa solução de Action ainda não me atende 100%, mais prefiro Action a usar Service, acredito que fica melhor organizada. Meu problema foi que comecei a ter services gigantes e isso me encomodava muito.

1
1

com vários endpoints dentro de um mesmo módulo. No início, manter tudo dentro de um único service

Acredito que aqui esteja a raiz do problema.

O problema não está em usar services mas em como você usava isso.

1

Também não vejo problema em usar Services, mas no projeto em questão, tive um estalo de trocar por Actions porque se tratava de um fluxo complexo de atendimento. Cada etapa ocorria em momentos diferentes, alterando ou complementando partes dos dados do modelo/registro, o que exigia endpoints distintos para cada fase do processo.

Atualmente, acho mais conveniente usar Actions.