Anatomia unei aplicații care crește sănătos
O aplicație mică se ține în controllere. Una care crește are nevoie de structură: logica de business separată de HTTP, validare dedicată, autorizare centralizată, sarcini lente puse pe cozi, efecte secundare prin evenimente. Lecția asta e harta acestor straturi și când introduci fiecare.
Simptomele unei aplicații care „scârțâie"
- Controllere de 300 de linii cu logică de business, validare și răspuns amestecate.
- Aceeași regulă (ex: „doar autorul editează") copiată în 5 locuri.
- Cereri HTTP lente pentru că trimit email sau procesează imagini în timpul cererii.
- Frică să modifici ceva pentru că nu știi ce se rupe.
Straturile
- Controller: primește cererea, cheamă un serviciu, întoarce un răspuns. Subțire.
- Form Request: validarea și autorizarea de intrare.
- Service / Action: logica de business, testabilă independent de HTTP.
- Model: date și relații, plus scope-uri și accesori.
- Job: munca lentă, rulată asincron.
- Event / Listener: efecte secundare decuplate (notificări, logare, cache).
Când introduci fiecare strat
Nu peste tot, din prima. Un CRUD simplu stă bine într-un controller. Extragi un serviciu când logica are mai mulți pași, se repetă, sau vrei s-o testezi. Adaugi un job când o operație durează peste ~200ms. Adaugi un event când vrei să reacționezi la ceva fără să cuplezi codul care declanșează de codul care reacționează.
Exercițiu
Ia un controller din proiectul tău (sau unul exemplu) cu peste 100 de linii. Identifică ce e validare, ce e logică de business, ce e formatare de răspuns. Schițează cum l-ai împărți pe straturi.
Greșeli frecvente
- Aplici toate straturile de la început, pe un CRUD banal — over-engineering.
- Nu aplici niciun strat și ajungi cu „God controllers".
- Muți cod în „servicii" care sunt doar controllere redenumite.
- Confunzi „mai multe fișiere" cu „arhitectură mai bună".
De reținut
- Controllere subțiri: cerere → serviciu → răspuns.
- Straturi: Form Request, Service/Action, Model, Job, Event/Listener.
- Introduci un strat când apare durerea, nu preventiv.
- Serviciile există ca să izolezi și să testezi logica de business.
Pe scurt
O aplicație sănătoasă are straturi cu responsabilități clare, introduse pe măsură ce complexitatea o cere.