Refactoring and Design Pattern

Fadhlan Hazmi
PPL D7 — Fasilkom UI
3 min readApr 16, 2019
Batik Pattern

Bukan, bukan, yang akan dibahas bukan pattern seperti batik, namun pattern yang digunakan dalam software engineering. Refactoring dan Design pattern merupakan praktek yang sering dilakukan dalam software engineering. Mari kita bahas kedua praktek tersebut lebih dalam.

Refactoring

Refactoring adalah proses sistematis untuk melakukan improvisasi pada kode tanpa membuat fungsionalitas baru. Improvisasi yang dilakukan saat refactoring juga termasuk membuat kode menjadi clean code dan lebih simpel.

Secara umum teknik-teknik refactoring dapat dibagi menjadi beberapa grup:

  • Composing Method, teknik dalam grup ini termasuk menyederhanakan method, menghapus duplikasi kode, dan mempersiapkan kode agar dapat di improve di masa depan.
  • Moving Features between Objects, teknik dalam grup ini termasuk fungsionalitas antar kelas secara aman, membuat kelas baru, dan menyembunyikan detail implementasi dari akses publik.
  • Organizing Data, teknik dalam grup ini mencakup semua teknik yang berhubungan data handling, mengganti teknik yang primitif dengan fungsionalitas kelas yang kaya.
  • Simplifying Conditional Expressions, teknik ini akan menyederhanakan conditional expression agar tidak semakin rumit.
  • Simplifying Method Calls, teknik ini akan membuat pemanggilan method lebih sederhana dan mudah untuk di mengerti.
  • Dealing with Generalization, teknik ini berkaitan dengan abstraksi, yang utamanya diasosiasikan dengan memindahkan fungsionalitas ke parent atau child class nya, membuat kelas dan interface baru, dan mengganti inheritance dengan delegasi dan sebaliknya.

Refactoring tidak harus dilakukan setiap saat. Refactoring dilakukan saat kita ingin menambah fitur, memperbaiki bug, dan saat code review.

Setelah melakukan refactoring pasti kita berekspektasi bahwa kode kita akan menjadi lebih baik, tapi apasih indikator kode kita sudah lebih baik?

  • Kode kita menjadi lebih rapih (clean code).
  • Fungsionalitas baru seharusnya tidak dibuat saat refactoring.
  • Setelah dilakukan refactoring kode tetap harus berhasil melewati test.

Nah, sudah terlihat kan bagaimana, kapan, dan mengapa harus melakukan refactoring. Mari kita lanjut membahas mengenai Design Pattern.

Design Pattern

Design pattern dalam software engineering adalah solusi untuk masalah yang sering muncul dalam software design yang dapat diterapkan berulang. Design pattern bukan merupakan desain jadi namun lebih kepada template untuk menyelesaikan suatu masalah yang dapat digunakan dalam berbagai situasi.

Secara umum, desain pattern dibagi menjadi tiga tipe, yaitu:

  • Creational, merupakan design pattern mengenai inisiasi kelas. Pattern ini dapat dibagi lagi menjadi class-creation patterns dan object-creation patterns. class-creation menggunakan inheritance secara efektif dalam proses inisiasi, sedangkan object-creation menggunakan delegasi.
  • Structural, merupakan design pattern mengenai komposisi kelas dan objek. Design pattern ini juga dapat dibagi lagi menjadi class-creation patterns dan object-patterns. Class-creation patterns menggunakan inheritance untuk menyusun sebuah interface. Object-patterns mendefinisikan sebuah cara untuk mendapatkan fungsionalitas baru.
  • Behavioral, merupakan design pattern yang secara spesifik membahas mengenai komunikasi antar objek dari kelas.

Lalu kenapa sih harus pake design pattern? Memang apa gunanya?

Design pattern dapat mempercepat proses development dengan memberikan paradigma yang sudah terbukti. menggunakan design pattern membantu mencegah isu yang dapat menyebabkan masalah besar dan meningkatkan code readability.

Our Implementation

Design pattern yang kami implementasi bukan merupakan pattern biasa ditemukan pada course-course mengenai design pattern. Pattern yang akan kami terapkan adalah Module Pattern.

Module pattern adalah pattern yang digunakan untuk melakukan implementasi konsep software module. Implementasi module pattern pada proyek kami adalah dengan membagi-bagi satu fungsionalitas besar menjadi modul-modul yang independen.

Contoh fungsionalitas yang sudah kami buat menjadi modul-modul adalah untuk prediksi user repurchase. Modul-modul pada implementasi fungsionalitas ini akan disatukan dalam suatu fungsi master.

mainPredictor.js sebagai master dan file js lain sebagai modul independen

Implementasi module pattern kami lakukan agar perubahan dapat dilakukan dengan lebih mudah, karena modul-modul yang sudah dibuat independen atau tidak bergantung satu modul dengan lainnya.

Demikian tulisan dari saya, semoga tulisan ini dapat bermanfaat bagi anda yang ingin menerapkan refactoring dan design pattern atau yang ingin menerapkannya lebih dalam lagi. Sekian tulisan dari saya, sampai ketemu di tulisan saya yang selanjutnya!

--

--