Refactoring dan Design Pattern

Ryan Naufal
PDB+R
Published in
5 min readApr 17, 2019

Halo pembaca medium kami yang hebat dan keren, Saya Ryan, salah satu Hacker dari kelompok PDB+R, dalam tulisan kali ini saya akan membahas mengenai Refactoring dan Design Pattern.

Refactoring

Refactoring

Refactoring merupakan suatu proses untuk melakukan klarifikasi atau simplifikasi desain dari code yang telah dibuat sebelumnya tanpa mengubah behavior dari code tersebut. Hal ini sangat penting, terutama dalam metodologi Agile. Karena saat mengembangkan aplikasi dengan agile, anggota tim tentunya akan melakukan maintaining ataupun mengembangkan code-nya dari iterasi satu ke iterasi selanjutnya. Hal tersebut mengakibatkan banyak sekali transformasi yang terjadi pada code. Oleh karena itu, refactoring merupakan salah satu cara yang mudah untuk mencegah terjadinya hal yang tidak diinginkan pada aplikasi.

Secara umum, refactoring dilakukan dengan tujuan untuk mencegah kerusakan pada code (code rot). Setiap kali terjadi perubahan pada code tanpa refactor tentunya akan menyebabkan code rot semakin besar dan menyebar. Sehingga refactor dapat digunakan untuk menjaga agar code mudah di maintain.

Hal-hal yang biasa dilakukan ketika refactoring adalah mereduksi baris, merubah struktur method, merubah nama variable atau method, mengubah data struktur, mengubah algoritma, dan masih banyak lagi.

Design Pattern

Hasil gambar untuk design pattern programming
Design Pattern

Dalam pembuatan aplikasi, design pattern merupakan sebuah solusi yang dapat digunakan secara berulang untuk suatu permasalahan yang sudah diimplementasikan sebelumnya. Dengan kata lain, design pattern merupakan template yang dapat dibuat untuk memecahkan suatu masalah pada code.

Design pattern dapat membantu mempercepat pengembangan suatu software karena pola-pola yang dijelaskan di dalam design pattern dapat membentuk suatu template yang ada. Dengan menggunakan design pattern ini programmer dapat melakukan penggunaan kembali code pada suatu aplikasi menjadi lebih mudah.

Terdapat 3 jenis kelompok dari design pattern yaitu Creational Design Pattern, Structural Design Patttern dan Behavioral Design Pattern, yang terbagi sebagai berikut :

Creational Design Pattern

Design Pattern ini berkaitan erat dengan class instantiation. Pattern ini pun memiliki beberapa jenis, yaitu:

  1. Abstract Factory: Membuat instance dari class yang saling berhubungan.
  2. Builder: Memisahkan construction object dari code representasinya.
  3. Factory Method: Membuat instance dari beberapa class turunan.
  4. Object Pool: Melakukan recycling object yang tidak digunakan.
  5. Method: Melakukan fully-initialized instance yang dapat dicopy atau cloned.
  6. Singleton: Membuat class yang hanya memiliki single instance

Structural Design Pattern

Design Pattern ini merupakan pattern yang berkaian dengan komposisi class dan object. Pattern ini memiliki beberapa jenis, yaitu:

  1. Adapter: Menghubungkan interface dengan class-class yang berbeda.
  2. Bridge: Memisahkan interface dari object dari implementasinya.
  3. Composite: Membentuk berupa tree structure yang sederhana.
  4. Decorator: Menambahkan responsibilities secara dinamis pada tiap object.
  5. Facade: Membuat sebuah class yang merepresentasikan keseluruhan subsystem.
  6. Flyweight: Digunakan untuk tujuan efisiensi.
  7. Private Class Data: Menjaga akses untuk accessor/mutator.
  8. Proxy: Membuat sebuah object yang merepresentasikan object lainnya.

Behavioral Design Pattern

Design Pattern ini berkaitan dengan komunikasi antar object. Pattern ini memiliki beberapa jenis, yaitu:

  1. Chain of Responsibility: Sebuah cara untuk menyampaikan request secara berantai.
  2. Command: Melakukan enkapsulasi command request sebagai suatu object
  3. Interpreter: Membuat cara untuk memasukkan ‘language element’ pada program.
  4. Iterator: Melakukan akses pada koleksi elemen secara sequential
  5. Mediator: Berperan sebagai mediator yang mendefinisikan komunikasi antar kelas agar lebih sederhana.
  6. Memento: Melakukan capture dan resture untuk objek pada internal state.
  7. Null Object: Dibuat agar memiliki peran sebagai default value dari suatu object.
  8. Observer: Memberikan notifikasi pada kelas-kelas tertentu apabila ada perubahan
  9. State: Mengubah behavior dari suatu object ketika statenya berubah.
  10. Strategy: Melakukan enkapsulasi algoritma di dalam class.
  11. Template Method: Membuat template algoritma untuk digunakan pada subclass.
  12. Visitor: Mendefinisikan operasi tertentu pada kelas tanpa mengubah apapun.

Implementasi kelompok kami

Pada project SISIDANG-NG yang dibuat kelompok kami, terdapat beberapa fitur yang hampir sama polanya satu sama lain, sehingga kami menggunakan refactor dan design pattern untuk memudahkan dalam mengembangkan aplikasi project kami, dengan salah satu contoh dan penjelasan sebagai berikut :

Refactoring

Untuk refactoring, kelompok kami melakukan refactor pada fitur yang memiliki fungsi dan cara kerja pada suatu fitur dan fitur lainnya yang hampir sama yaitu dengan cara merubah nama method dan nama variable saja yang contohnya pada views di dua app yaitu CRUD Data Mahasiswa dan CRUD Data Dosen.

Code views.py pada fitur CRUD Data Mahasiswa.
Code views.py pada fitur CRUD Data Dosen.

Dari kedua code diatas dapat dilihat bahwa kedua fitur memiliki dua fungsi dan cara kerja yang hampir sama. Kelompok kami melakukan refactor dari code yang sudah dibuat di views.py pada CRUD Data Mahasiswa dengan cara merubah nama method dan nama variable nya untuk membuat code di views.py pada CRUD Data Dosen.

Design Pattern

Untuk design pattern, kelompok kami menggunakan salah satu design pattern yaitu builder pattern untuk membuat method yang melakukan konstruksi dari objek tersebut, setelah itu objek tersebut akan digunakan pada fitur yang ada dan hanya cukup memanggil method konstruksi tersebut yang contohnya pada salah satu test dari fitur CRUD Data Mahasiswa.

Code pembuatan objek mahasiswa di tests.py pada fitur CRUD Data Mahasiswa

Code diatas adalah salah satu implementasi pembuatan method untuk melakukan konstruksi dari suatu objek di tests.py pada fitur CRUD Data Mahasiswa test.py yang menggunakan builder pattern.

Oke deh gan, sepertinya tulisan dari saya mengenai Refactoring dan Design Pattern segini dulu, semoga kalian ke-depannya semakin tertarik dengan tulisan dan kelompok kami :)

Referensi :

--

--