Laravel 12 Best Practice: Kesalahan Umum Yang Membuat Code Kamu Sulit Di Maintenance

logo icon

Admin Teguh

-

21 Oktober 2025

Laravel 12 Best Practice: Kesalahan Umum Yang Membuat Code Kamu Sulit Di Maintenance

Pernah nggak sih, kamu buka code Laravel yang ditulis beberapa bulan lalu, terus kamu sendiri bingung "bagian code ini maksutnya apa ya? duh aku lupa" atau lebih parah lagi, takut nge-fix bug karena khawatir bakal bikin error di tempat lain? Nah, itu tandanya code kamu butuh improvement dalam hal maintainability.

Laravel sudah dilengkapi dengan berbagai fitur-fitur yang keren, tapi sayangnya banyak developer yang masih mengulangi kesalahan-kesalahan klasik yang bikin code mereka menjadi nightmare buat di-maintain. Di artikel ini, kita akan bahas kesalahan-kesalahan umum tersebut dan bagaimana cara menghindarinya.

Fat Controller Syndrome

Ini salah satu kesalahan yang paling sering dilakukan, bahkan developer yang sudah berpengalaman sekalipun. Controller yang gemuk dengan ratusan baris code logic, validation, database query, sampai business logic semua di implementasikan jadi satu pada controller.

❌ Wrong Examples

public function store(Request $request) {
  // 50 lines validation code + custom error mesagges
	// 30 line data processing
	// 20 line database query
	// 15 line notification logic
}

Contoh kode diatas akan jadi bermasalah di masa mendatang, kenapa? Karena ketika kamu atau tim kamu perlu mengubah satu fitur kecil, kamu harus baca dan pahami ratusan baris code. Belum lagi kalau ada bug, debugging jadi lebih lama.

Solusinya adalah gunakan Service Pattern atau Action Pattern dengan memisahkan business logic ke class tersendiri. Controller cukup jadi koordinator yang memanggil service-service yang dibutuhkan saja.

Form Request Validation Sering Dianggap Tidak Penting

Banyak developer laravel yang malas bikin Form Request class dan lebih suka melakukan validasi input secara langsung di controller dengan method $request->validate(). Memang lebih cepat di awal, tapi bisa jadi bumerang nanti. Masalahnya, validation logic kamu jadi tersebar di berbagai controller. Misal ada perubahan aturan validasi email, kamu harus cari satu-satu di semua controller.

❌ Wrong Example

public function store(Request $request) {
 $validation = $request->validate([
	  'username' => 'required|string',
	  'password' => 'required|min:8'
	 ], [
    'username.required' => 'Username cannot be null',
	  'password.min' => 'Minimal chars for password is 8'
 ]);
	
 // other code
}

Selalu gunakan Form Request untuk validation agar membuat code lebih terorganisir dan reusable.

php artisan make:request StoreUserRequest

✅ Good Example

public function rules(): array
{
    return [
        'name' => 'required|string',
        'password' => 'required|min:8',
    ];
}

public function messages(): array
{
    return [
		 'username.required' => 'Username cannot be null',
	   'password.min' => 'Minimal chars for password is 8'
		];
}

Lalu ubah controller menjadi seperti ini:

public function (StoreUserRequest $request) {
  User::create($request->validated());
}

Terlihat lebih clean dan rapih kan?

Tidak Menggunakan Database Transaction

Bayangkan saja kita memiliki skenario seperti ini: Code kamu mengurangi saldo user A, tapi sebelum menambah saldo user B, terjadi error. Hasilnya? uang user A hilang begitu saja.

❌ Wrong Example

$sender->balance -= $amount;
$sender->save();
// An error occurred here
$receiver->balance += $amount;
$receiver->save();

Maka dari itu gunakan database transaction untuk operasi yang melibatkan multiple queries seperti dibawah ini:

✅ Good Example

DB::transaction(function () use ($sender, $receiver, $amount) {
    $sender->decrement('balance', $amount);
    $receiver->increment('balance', $amount);
});

N+1 Query Problem

N+1 Query terjadi ketika aplikasi menjalankan 1 query untuk mengambil kumpulan data utama, lalu menjalankan N query tambahan di dalam loop untuk mengambil relasi tiap item, sehingga total menjadi N+1 query yang seharusnya bisa dipangkas menjadi jauh lebih sedikit dengan teknik yang tepat.

Tanpa kamu sadari N+1 Query membuat aplikasimu berjalan menjadi lambat dan tentunya mengganggu performa.

❌ Wrong Example

$posts = Post::all();
foreach ($posts as $post) {
    echo $post->user->name; // Query user for each post
}

✅ Good Example

$posts = Post::with('user')->get();

Melakukan Query Langsung di Blade Template

Ini kesalahan fatal yang sering dilakukan pemula. Menulis query Eloquent langsung di file blade:

@foreach(User::where('active', 1)->get() as $user)
    <li>{{ $user->name }}</li>
@endforeach

Kenapa ini berbahaya dan sama sekali tidak disarankan? Pertama, performa jadi lambat karena query dieksekusi setiap kali template di-render. Kedua, mixing business logic dengan presentation layer melanggar prinsip separation of concerns.

Kesimpulan

Maintainability bukan sesuatu yang terjadi secara ajaib. Itu adalah hasil dari keputusan-keputusan kecil yang konsisten setiap hari. Hindari kesalahan-kesalahan di atas, dan code Laravel kamu akan jadi lebih mudah di-maintain, lebih mudah di scaling, dan lebih mudah dikerjakan dengan tim.

Remember, good code adalah code yang mudah diubah. Kalau code kamu mudah di-maintain, artinya kamu sudah on the right track. Thanks you!

Teguh Budi Laksono

Teguh Budi Laksono

"bukan orang sempurna, hanya seseorang yang terus belajar dan berusaha, karena ia percaya bahwa mimpi besar lahir dari proses panjang dan konsisten."

Tags :

laravel

common mistakes laravel developer

best practice laravel 12

Avoid common mistakes in Laravel 12

laravel 12

learn coding with nganggurdev

web dev

Suka dengan artikel di NganggurDev? Yuk, beri dukungan untuk penulis. Terima kasih banyak!

Want to read more? Click me!