Controller Laravel kamu makin gemuk dan sulit dibaca? Pelajari cara menggunakan Service Layer untuk memisahkan business logic agar kode lebih clean, rapi, dan mudah
Ketika pertama kali belajar Laravel, banyak developer (termasuk saya juga, sih) menulis semua logic langsung di controller. Kenapa? Karena kelihatannya lebih cepat dan sederhana. Semua proses, mulai dari validasi, query ke database, pengolahan data, sampai mengirim response ditaruh di satu tempat. Awalnya cara ini memang terasa praktis, terutama untuk project kecil. Tapi seiring project berkembang, controller mulai “menggemuk”.
Logic semakin panjang, kode sulit dibaca, dan setiap ada perubahan kecil, satu file bisa ikut berantakan. Akhirnya, debugging pun jadi makan waktu lebih banyak dari seharusnya. Padahal, controller tidak seharusnya menampung semua logic. Tugas controller itu sederhana: menerima request, meneruskan ke logic utama, dan mengembalikan response. Logic utama itulah yang seharusnya dipisahkan, dan, di sinilah service layer berperan.
Apa Itu Service Layer?
Service layer adalah sebuah lapisan tambahan yang berfungsi sebagai “otak” dibalik proses bisnis aplikasi. Alih-alih menumpuk semua logic di controller, tugas-tugas penting seperti pemrosesan bisnis, atau pemanggilan API eksternal dipindahkan ke dalam service. Dengan begitu, controller hanya menjadi perantara yang menerima request dan meneruskannya ke service untuk dikerjakan.
Pendekatan ini membuat controller jadi lebih bersih dan ringkas, sehingga mudah dibaca dan dipelihara. Selain itu, logic yang ditempatkan di service dapat digunakan kembali di berbagai tempat, tidak hanya satu controller saja. Proses testing pun jadi lebih sederhana karena kita cukup menguji service-nya secara terpisah. Hasilnya, struktur kode menjadi lebih rapi, terorganisir, dan lebih mudah dikembangkan dalam jangka panjang.
Penerapan Service Layer di Laravel
Struktur Folder
Dalam contoh ini, kita memisahkan logika aplikasi menjadi beberapa bagian. Controller hanya fokus pada alur permintaan (request) dan tanggapan (response), sedangkan Service berisi seluruh business logic seperti pembuatan antrian, pengiriman notifikasi, dan pencatatan log.
Membuat Service Layer
File ini menjadi pusat logika bisnis. Saat create() dijalankan, service akan menyimpan data antrian baru (nama pasien, dokter, jadwal), mengirim notifikasi ke dokter melalui QueueCreatedNotification, mencatat log aktivitas untuk keperluan audit, dan menangani error dengan try-catch agar sistem tetap aman. Semua proses pembuatan antrian terkumpul di satu tempat, tidak bercampur di controller.
Implementasi Service di Controller
Controller berperan sebagai penghubung antara pengguna dan sistem. Ia menerima request, memvalidasi data lewat QueueStoreRequest, lalu meneruskannya ke QueueService. Setelah berhasil, controller mengembalikan respon JSON berisi pesan sukses dan data antrian. Dengan cara ini, controller tetap sederhana dan fokus pada alur kerja tanpa logika bisnis di dalamnya.
Kapan Harus Pakai Service Layer
Service layer menjadi solusi yang tepat ketika aplikasi mulai tumbuh dan logic semakin kompleks. Awalnya, semua proses mungkin terasa cukup ditulis langsung di controller, tapi seiring bertambahnya fitur, struktur kode bisa dengan cepat menjadi berantakan. Dengan memisahkan logic ke dalam service, kode jadi lebih rapi, mudah dikelola, dan fleksibel saat ada perubahan.
Kamu sebaiknya mulai memakai service layer ketika:
● Logic di controller sudah lebih dari sekadar CRUD sederhana.
● Ada banyak proses tambahan (email, notifikasi, logging, dsb).
● Logic yang sama digunakan di banyak tempat (misalnya: API & dashboard admin).
● Kamu ingin menjaga struktur project tetap bersih dan mudah dikembangkan.
Controller Bukan Tempat Semua Logic Tinggal!
Controller punya peran penting dalam arsitektur aplikasi, tapi bukan berarti semua logic harus ditaruh di sana. Kalau controller menampung semua proses, maka seiring waktu kode akan sulit dibaca, sulit diuji, dan lebih rentan error ketika ada perubahan. Di sinilah service layer berfungsi: memisahkan tanggung jawab antara controller dan business logic, sehingga kode lebih rapi dan mudah dikembangkan.
Controller cukup fokus pada menerima request dan mengembalikan response. Sementara itu, service menangani seluruh business logic yang lebih kompleks. Jadi, kalau controllermu mulai “gemuk” dengan banyak if-else, validasi panjang, atau proses tambahan… mungkin saatnya kamu bikin service layer.