Laravel Service Repository Action Pattern Thin Controller
Definisi
Tiga pola pemisahan tanggung jawab di Laravel untuk menjaga controller tetap tipis:
- Service: kelas yang berisi logika bisnis inti, dipanggil dari controller/action.
- Repository: abstraksi akses data (query Eloquent) supaya controller tidak bergantung langsung ke model/query.
- Action (Single Action Class): kelas dengan satu method
handle()yang melakukan satu tugas spesifik.
Kapan dipakai
- Service: logika yang melibatkan beberapa model atau aturan bisnis, dipakai di lebih dari satu tempat.
- Repository: kalau kamu ingin mengganti sumber data (DB → API) tanpa menyentuh controller, atau mau test dengan mock.
- Action: satu operasi spesifik yang punya nama jelas (misal
SendInvoiceAction), supaya controller hanya memanggil satu kelas.
Jangan over-engineer: untuk CRUD sederhana, langsung query di controller/model sudah cukup.
Cara kerja
Service
class OrderService
{
public function __construct(private PaymentGateway $gateway) {}