Service Layer di Laravel: Kapan Controller Anda Mulai Terlalu Gemuk
Setiap beberapa bulan muncul lagi perdebatan yang sama: apakah controller boleh memanggil Eloquent langsung? Jawabannya, seperti biasa, tergantung — tapi ada indikator yang cukup objektif.
Tanda controller Anda sudah terlalu gemuk
- Satu method controller lebih dari 30 baris.
- Logika yang sama muncul di controller web dan controller API.
- Anda harus membuat request HTTP palsu hanya untuk menguji satu aturan bisnis.
- Ada
DB::transactiondi dalam controller.
Poin terakhir yang paling menentukan. Transaksi database menandakan ada beberapa perubahan state yang harus terjadi bersama — dan itu definisi dari sebuah operasi bisnis, bukan urusan lapisan HTTP.
Bentuk service yang sehat
final class OrderService
{
public function __construct(
private readonly LicenseService $licenses,
private readonly InvoiceService $invoices,
) {}
public function markAsPaid(Order $order): Order
{
if ($order->isPaid()) {
return $order; // idempoten: webhook bisa datang dua kali
}
return DB::transaction(function () use ($order) {
$order->update([...]);
$this->licenses->issueFor($order);
$this->invoices->createForOrder($order);
return $order->fresh();
});
}
}
Halaman 1 dari 2
#laravel
#clean code
#arsitektur
Butuh implementasinya di bisnis Anda?
Kami bantu dari analisa sampai deployment.