Alif Akbar.
← Kembali ke Blog/Kisah Engineering

Bertahan dan Melakukan Refaktor pada 3 Sistem B2B Legacy.

Waktu baca 6 mnt

Ringkasan Eksekutif: Refactoring sistem B2B legacy di Laravel difokuskan pada penghentian pelanggaran integritas data dan merapikan kode 'spaghetti'. Saya mengimplementasikan pengujian berbasis Postman, prinsip SOLID, dan abstraksi Repository Pattern untuk memodernisasi logika bisnis inti tanpa menyebabkan downtime pada server production.

Proyek "Greenfield" adalah apa yang diimpikan oleh setiap developer—lembaran kosong, repositori segar, dan tumpukan teknologi terbaru. Tetapi realitas seorang software engineer senior adalah nilai yang sebenarnya sering kali diciptakan dengan menyelamatkan basis kode yang sudah ada di production, menghasilkan pendapatan, dan aktif mengalami kegagalan.

Selama waktu saya di PT Labani Media Nusantara, saya mewarisi tiga aplikasi B2B legacy yang masif: sistem manajemen Laundry, jaringan Koperasi, dan platform Pegadaian. Semuanya dibangun dengan Laravel, tetapi mereka menderita cacat logika kritis, kode "spaghetti", dan pelanggaran integritas data yang parah.

Berikut adalah cara saya mendekati modernisasi mereka tanpa merusak operasi bisnis yang aktif.

Langkah 1: Fase Triase

Ketika Anda membuka monolitik controller besar yang tidak terdokumentasi dan panjangnya 3.000 baris, naluri pertama Anda adalah menulis ulang. Jangan.

Rewrite adalah risiko bisnis yang sangat besar. Alih-alih demikian, minggu pertama saya dihabiskan hanya untuk mengamati. Saya memantau log query database dan mengidentifikasi endpoint yang menyebabkan memory exhaustion (biasanya karena masalah N+1 query). Saya memetakan alur bisnis utama (misalnya, bagaimana transaksi gadai disetujui) dengan membaca jalur eksekusi yang sebenarnya, karena dokumentasi tidak ada. Ini sangat penting terutama saat menavigasi Eloquent ORM.

Langkah 2: Mengamankan perimeter

Sebelum melakukan refactoring pada business logic, saya harus menambal kerentanan autentikasi. Kode legacy sering kali memeriksa otorisasi di tingkat UI (menyembunyikan tombol) tetapi gagal total melindungi route POST yang mendasarinya. Saya segera mengimplementasikan Laravel Middleware dan Form Request yang ketat untuk memastikan bahwa ID spoofing atau eskalasi hak istimewa tidak mungkin terjadi.

Langkah 3: Mengekstraksi Fat Controllers ke Service Classes

Masalah inti dari aplikasi-aplikasi ini adalah Controller melakukan segalanya: memvalidasi permintaan, menulis SQL mentah, memproses pembayaran, dan memformat views.

Saya perlahan-lahan memigrasi aplikasi ke Service-Repository pattern. Saya mengekstraksi business logic keluar dari controller dan masuk ke dalam Service classes khusus (misalnya, ProcessPawnTransactionService). Ini memungkinkan saya untuk:

  • Mengisolasi aturan bisnis dari lapisan HTTP.
  • Menulis unit tests (via Pest/PHPUnit) untuk perhitungan keuangan yang tepat, membuktikan bahwa mereka bekerja sebelum saya menyentuh hal lain.
  • Menggunakan ulang logika dengan mudah di berbagai bagian aplikasi atau API endpoint baru.

Langkah 4: Memperbaiki Integritas Data

Database tersebut kurang memiliki batasan foreign key yang tepat, yang berarti record "yatim piatu" (orphan) ada di mana-mana. Saya menulis skrip migrasi yang secara aman menautkan kembali data yang yatim piatu menggunakan heuristik, dan kemudian mengunci skema MySQL dengan foreign key yang ketat dan aturan cascading. Dari titik itu dan seterusnya, menjadi tidak mungkin bagi kode aplikasi untuk merusak relasi database.

Pelajaran Penting

Refactoring sistem legacy bukanlah hal yang glamor, tetapi itu memaksa Anda untuk menjadi seorang software architect sejati. Hal ini mengajarkan Anda untuk menghormati kode yang membayar tagihan, memprioritaskan pengujian, dan mengimplementasikan prinsip-prinsip SOLID bukan karena buku teks mengatakan demikian, tetapi karena Anda telah melihat bencana yang terjadi tanpanya.

Pada akhirnya, merestrukturisasi sistem Laravel monolitik semacam ini sangat meningkatkan kepuasan pengembang dan nilai bisnis. Dengan mengisolasi komponen-komponen kritis menjadi layanan modular yang dapat diuji (testable), kami berhasil mengurangi waktu penerapan (deployment time) dan secara drastis menekan jumlah regresi produksi. Inilah arti dari engineering perangkat lunak yang berorientasi pada hasil.

Baca Lebih Lanjut & Arsitektur Terkait

Butuh solusi untuk sistem Laravel legacy Anda? Hubungi saya