Lewati ke konten utama

Service Layer di Laravel: Kapan Controller Anda Mulai Terlalu Gemuk

Mustaf

25 Agustus 2026

2 menit baca · 333 kali dibaca
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

  1. Satu method controller lebih dari 30 baris.
  2. Logika yang sama muncul di controller web dan controller API.
  3. Anda harus membuat request HTTP palsu hanya untuk menguji satu aturan bisnis.
  4. Ada DB::transaction di 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
‹ Sebelumnya 1 2 Selanjutnya ›
#laravel #clean code #arsitektur

Butuh implementasinya di bisnis Anda?

Kami bantu dari analisa sampai deployment.

Request Project