Javan Cipta Solusi
Published in

Javan Cipta Solusi

Skinny Controller

Sejak kemunculan Ruby on Rails di tahun 2005, MVC framework telah menjadi standard de facto dalam sebuah pengembangan aplikasi berbasis web. PHP, sebagai tetangga dekat Ruby, tidak mau ketinggalan menelurkan framework-nya sendiri: CodeIgniter, CakePHP, Yii, hingga yang sedang booming belakangan ini, Laravel. Itu cuma sebagian kecil dari daftar panjang di https://en.wikipedia.org/wiki/Category:PHP_frameworks.

MVC telah menjadi mindset bagi kebanyakan programmer, Model untuk query ke database, View untuk layouting, dan Controller untuk “sisanya”.

Controller untuk sisanya, dari sinilah awal mula bencana.

Terjebak dalam mindset MVC, 6 tahun lalu saya pernah membuat satu fungsi di Controller yang jumlah barisnya mencapai ratusan. Jika di total, dalam satu kelas bisa mencapai ribuan baris kode.

Tipikal Controller jaman now

Apa yang salah dengan fungsi di atas?

  1. Terlalu banyak task dalam satu fungsi
  2. Menggunakan alternative syntax untuk control structures (block if: endif;)

Pada artikel ini kita akan fokus pada kesalahan nomor 1 saja.

Solusi

Untuk mengetahui solusi dari masalah pertama, kita harus identifikasi dulu apa saja yang dikerjakan oleh fungsi tersebut:

  1. Mengecek hak akses
  2. Membuat folder dengan format “Ymd” jika belum tersedia
  3. Menyimpan data ke database
  4. Menulis ke file
  5. Meng-generate random string

Dari gambaran di atas, langkah selanjutnya adalah membuat fungsi untuk masing-masing task sehingga controller tinggal memanggilnya.

Hasil refactoring Controller tampak lebih clean, mudah dipahami dan pastinya lebih sedikit baris kode, meskipun kita tidak benar-benar menguranginya, tetapi memindahkan ke tempat lain yang lebih sesuai.

Kelebihan lainnya adalah, fungsi createManyFromInput() bisa dimanfaatkan di tempat lain jika dibutuhkan. Don’t repeat yourself.

Tahukah Anda, Laravel tersusun atas 54.398 baris kode, dan fungsi terpanjangnya hanya terdiri dari 13 baris? Silakan baca https://medium.com/@taylorotwell/measuring-code-complexity-64356da605f9

Untuk nomor 2, bagi saya ini masalah karena hampir semua framework PHP tidak pernah ada yang menulis if else dengan cara seperti itu di dalam sebuah kelas. Kalau untuk templating HTML masih mending.

Ya, ini hanya masalah standard dan kebiasaan. Jika Anda menulis kode untuk diri sendiri, silakan teruskan apa yang membuat Anda nyaman dan produktif. Tapi ketika Anda bekerja dalam sebuah tim, pastikan semua anggota tim memiliki standard yang sama, termasuk masalah spasi vs tab.

Epilog

Jika ada bagian yang terpaksa harus fat, maka pilihlah Model. Pindahkan semua logic dari Controller ke Model. Fat Model lebih mudah diobati daripada Fat Controller.

Skinny everything. No class (or function) should be fat. Ever.

FYI, saat ini PT Javan Cipta Solusi sedang membuka lowongan untuk posisi Programmer PHP. Sehari-hari kami menggunakan Laravel (the right way) untuk menghasilkan aplikasi yang bermanfaat bagi orang lain. Jika tertarik, silakan kirim email perkenalan ke bayu.hendra[at]javan.co.id.

--

--

Business Process Optimization Partner. Contact us to help you optimize your business using technology.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Bayu Hendra Winata

Bayu Hendra Winata

80% programmer, 20% designer, 100% ayah