Refactor and Design Pattern


Refactor pada pengembangan perangkat lunak didefinisikan sebagai mengubah sistem perangkat lunak dengan meningkatkan striktur internal dari perangkat lunak tersebut tanpa mengubah perilaku eksternalnya. Untuk lebih jelasnya, intinya refactor adalah sebuah teknik untuk melakukan peng-strukturan ulang kode secara disiplin.

Refactor sendiri membuat perangkat lunak yang dikembangkan lebih mudah dimengerti dan "cost" untuk modifikasinya lebih murah. Selain itu, refactor juga meningkatkan desain dari perangkat lunak. Dengan refactoring juga dapat membantu menemukan bugs pada program dan membuat program yang dikembangkan berjalan lebih cepat karena kita memiliki pemahaman situasi yang lebih terhadapt programnya.

Refactor dilakukan pada beberapa situasi. Pertama, adalah saat developer menambahkan suatu fungsi karena terkadang desain yang sudah dikembangkan tidak memperbolehkan menambahkan fitur begitu saja. Lalu, saat ingin mencari bugs khususnya saat adanya bug report itulah saat yang tepat untuk melakukan refactoring karena kodenya tidak cukup jelas untuk langsung menemukan bug-nya. Lalu, saat dilakukannya code review karena ini adalah momen dimana untuk menyebarkan ilmu ke seluruh tim pengembang dan ini works best untuk review group yang berukuran kecil.

Ada banyak tipe refactoring, antara lain renaming, extracting, splitting one method, performance optimization dan lain-lain yang dapat dilihat lebih lengkap di http://refactoring.org/catalog .

Berikut ini adalah pengalaman-pengalaman saya dalam refactoring selama PPL ini nih:

  • Salah satu teknik yang pernah saya terapkan di PPL ini adalah substitute algorithm yaitu mengubah algoritma yang ada yaitu mengubah fungsi pengalokasian dengan penambahan penghitungan suatu fitur perhitungan sebagai pertimbangan pengalokasian. Oiya, tapi gak bisa kasih snippet kodenya nih soalnya confidential.
  • Lalu, saya juga pernah meng-update fungsi untuk set rank bagi Ketua Arisan. Hal tersebut perlu dilakukan karena adanya penambahan parameter saat proses pengembangan. Itu dilakukan agar algoritma yang kami ciptakan bisa sesuai dengan kebutuhan yaitu mengutamakan ketua arisan ketua arisan yang memang penting untuk dikunjungi.
  • Selain itu, yang simple saya juga pernah yaitu menggunakan inline method dengan menggunakan higher order function dan juga fungsi lambda pada python. Fungsi lambda sendiri menggunakan paradigma pemrograman fungsional. Berikut potongan kode penggunaannya



  • Saya juga pernah refactor fungsi upload pada sistem yang kami kembangkan. Jadi, pada tahapan awal, fungsi upload kami menerima empat buah berkas untuk mengisi data yang diperlukan oleh sistem. Nah, pada sprint 2 kami menyadari bahwa sebenarnya beberapa data dapat dilakukan seeding. Kenapa? Itu karena data tersebut tidaklah sering berubah dan bahkan chance berubahnya tidak sedikit. Oleh karena itu, saya harus mengubah algoritma uplaod yang telah dibuat menjadi hanya 2 berkas dengan 2 berkas lainnya dilakukan seeding. Dengan itu, selain endpoint dan fungsi upload yang kini menerima 2 buah berkas, saya juga harus mengubah fungsi parser untuk memproses CSV dan meletakkan data-datanya ke DB menjadi hanya 2 berkas.
  • Refactor kecil-kecil juga seringkali saya lakukan, seperti mengubah nama variabel, mengubah nama method. Kenapa itu harus dilakukan? Karena penamaan sangatlah penting guna meningkatkan code readability, sehingga kode yang kita buat mudah dimengerti sehingga jika suatu saat kita membaca ulang kode yang dibuat, mudah dimengerti dan jika orang lain membaca juga mudah dimengerti sehingga juga jika orang lain ingin meneruskan atau mengubah kode kita, ia akan dengan mudah melakukannya.

Sekian nih penjelasan singkat tentang refactoring. Lebih lengkapnya lagi, bisa dilihat di post teman saya yaitu Wisnu disini.


Sekarang saya ingin membahas tentang design pattern.

Terdapat 23 design patterns yang diklasifikasikan menjadi 3 kategori yaitu, creational pattern, structural pattern, dan behavioral pattern. Secara garis besar, creational pattern fokus kepada bagaimana suatu program membuat objek dengan "menyembunyikan" logika dari pembuatannya sendiri daripada menunjukan menginisiasi objek dengan menggunakan operator. Structural pattern terfokus pada class dan object composition. Konsep warisan digunakan untuk membentuk interfaces dan menentukan bagaimana membuat suatu objek dengan menggapai fungsionalitas baru. Behavioral patterns secara spesifik fokus dengan komunikasi antar objek.

Pada kelompok PPL saya, kami menggunakan salah satu design patterns yaitu MVC (Model-View-Conroller) pattern yang diklasifikasikan sebagai behavioral pattern. MVC pattern digunakan untuk membagi ke beberapa komponen yaitu Model, View, dan Controller. Model merepresentasikan objek, pada bagian ini juga terkandung logika untuk memperbarui controller jika adanya perubahan data. View merepresentasikan visualisasi data yang ada pada model. Controller untuk mengontrol flow data ke model dan memperbaharui view ketika ada perubahan data. Controller memastikan view dan model tetap terpisah.

Berikut adalah diagram visualisasi MVC


Pada bahasa pemrograman yang kami gunakan, python terdapat dua framework MVC terkenal yaitu Django dan Flask. Kelompok kami menggunakan Flask.

Sekian penjelasan dari saya. Terima kasiih


0 komentar:

Post a Comment