code is duplicated • a routine is too long • a loop is too long or deeply nested • a class has poor cohesion • a class uses too much coupling • inconsistent level of abstraction • too many parameters • to compartmentalize changes (change one place -> must change others) • to modify an inheritance hierarchy in parallel • to group related data into a class • a "middle man" object doesn't do much • poor encapsulation of data that should be private • a weak subclass doesn't use its inherited functionality • a class contains unused code
"Hah?! Perasaan tubuh aku ga pernah ngerasain gejala kayak gitu"
Nah! Memang bukan tubuh kamu! Tapi code kamu! Kalau kamu merasa code yang kamu buat termasuk salah satu dari gejala-gejala di atas, kamu harus segera melakukan refactoring!
Kenapa harus? Refactoring akan berguna untuk meng-improve design software kamu, membuat code menjadi lebih mudah untuk dimengerti, dapat membantu menemukan bug, dan tentunya untuk membuat program lebih cepat dan efisien.
Untuk membantu kamu memulai melakukan refactoring, nih ada sumber yang akan sangat membantu kamu. Langsung dibuka aja yuk link berikut: https://refactoring.com/catalog/ fix habis buka ini langsung tau kan apa yang harus diubah di code kamu?!
Disini sekalian mau aku kasih contoh nih keadaan code aku sebelum & sesudah di refactor.
[BEFORE]
Sekilas, pasti kelihatan banget ga sih, betapa redundant-nya code di bawah ini. Line untuk nge-query ditulis berulang-ulang. Sangat dipastikan, code di bawah ini sedang terkena gejala code is duplicated so harus segera di refactor!
[AFTER]
Nah, di sini aku coba mengimplementasikan refactoring kategori parameterized method, dimana aku menggabungkan ketiga method sebelumnya menjadi satu method dengan menambahkan parameter penentu condition yang akan digunakan di dalam method. Jadi terlihat "ga bodoh" kan ya code-nya? Hehe
Berhubung ternyata code yang aku buat banyak yang bodoh (wkwk) jadi ada satu contoh lagi nih. Mungkin bisa sekaligus menambah referensi cara refactor kamu juga.
[BEFORE]
Yang ini lebih keliatan lagi nih redundant-nya. Data-data yang dipakai sebagai mock_data di ketiga function test ini di define berkali-kali. Hadu. Sangat amat bodoh ini. Jangan ditiru ya. Mari kita refactor!
[AFTER]
Mantap! Langsung singkat, padat, dan jelas banget kan? Kalau yang ini, aku melakukan refactoring kategori extract method dimana pendefinisian mock_data di setiap function aku wrap ke suatu function baru yang namanya create_mock_data, jadi nanti ketika akan digunakan, tinggal panggil aja satu line baris create_mock_data() tanpa harus mendefinisikannya ulang.
Nah, semakin mendalami refactoring, sebenarnya akan membawa kamu kepada sebuah term bernama design pattern, dimana sebenarnya sudah ada pattern-pattern yang telah ditemukan pada pengembang aplikasi untuk me-solve beberapa masalah pada pemrograman. Pengaplikasian design pattern ini akan sangat membantu menciptakan clean code application.
Hmm, aku kasih contoh satu deh tentang design pattern. Kalau kamu lihat kembali hasil refactoring aku yang pertama sebenarnya menggunakan modifikasi dari design pattern yang bernama strategy pattern, yang adalah sebuah pattern dimana suatu class dapat memiliki implementasi operasi yang berbeda tergantung pada parameter pembuatan class tersebut. Di sini, aku memodifikasinya dengan menerapkannya pada function, bukan class.
Sebenarnya masih banyak lagi design pattern yang ada di dunia ini. Mungkin di lain waktu, aku akan kasih contoh-contoh nyatanya lagi dari penerapan design pattern di aplikasi allocateam ya. Kalau mau tau lebih lanjut tentang design pattern, ada loh mata kuliahnya di Fasilkom UI, namanya Advanced Programming hehe
Jangan lupa,
Waspada gejala-gejala harus refactoring ya!
Sekian untuk kesempatan kali ini.
Salam, allocaters!
0 komentar:
Post a Comment