“Kita pake design pattern apa aja deh?” : Design pattern dan Refactoring

Tyagita Larasati
PPL cewe semua!
Published in
3 min readApr 29, 2019
source: https://manufacturingstories.com/wp-content/uploads/2017/07/programming-languages-to-learn-for-wordpress-featured-image.png

Design pattern?

Design pattern merukan sebuah solusi umum untuk masalah yang seing dijumpai saat pengembangan software. Penggunaan design pattern ditentukan dengan permasalahan yang ingin diatasi ataupun dihindari.

Design pattern terdapat 3 jenis, yaitu:

  • Creational design pattern — berhubungan dengan instansiasi suatu class.
  • Structural design pattern — berhubungan dengan komposisi suatu class dan object.
  • Behavioral design pattern — berhubungan dengan komunikasi antar object.

Design pattern di sumbang.in

Berikut beberapa contoh design pattern yang diterapkan di sumbang.in:

CREATIONAL

  • Singleton

Design pattern ini digunakan untuk memastikan satu class hanya memiliki satu instance. Di sumbang.in kami menerapkan design pattern ini untuk shared preference pengguna, karena kami ingin menyimpan data aplikasi hanya pada satu tempat saja.

  • Buider

Design pattern ini merupakan design pattern yang digunakan untuk menyembunyikan construction object yang kompleks. Retrofit telah menyediakan implementasi dari design pattern builder. Aplikasi sumbang.in menyembunyikan Retrofit.builder ke dalam ServiceGenerator. Dengan begitu untuk membuat object retrofit hanya perlu memanggil ServiceGenerator.createService(UserService.class). Sehingga akan mempermudah dan menghidari duplikasi penulisan code.

STRUCTURAL

  • Composite

Design pattern ini merupakan design pattern yang menyusun sebuah object menjadi hierarchical seperti tree. Contoh yang dapat dilihat adalah pada file xml yang terdapat pada sumbangin.in android. Dimana dapat dilihat bahwa Scroolview berperan sebagai parent-nya dan RelativeLayout sebagai childrennya. Dan RelativeLayoutpun juga dapat memiliki children, dan begitu seterusnya.

BEHAVIORAL

  • Template Method

Design pattern ini mendefinisikan skeleton suatu algoritma dalam superclass tetapi memungkinkan subclass untuk mendefinisikan langkah algoritma tersebut. Contoh implementasinya adalah sebagai berikut:

AddressView dan ManageUserView memiliki fungsi yang berbeda, namun kedua kelas ini digunakan untuk mendapatkan dan mengupdate object. Sehingga kelas ini menggunakan class generics.RetrieveUpdateApiView. Class ini menyembunyikan implementasi algoritma untuk menghandle request GET, POST, dan PATCH. AddressView dan ManageUserView dapat mengoveride variable dan method yang sudah didefinisikan sesuai dengan implementasi masing-masing.

Refactoring?

Jikalau sudah biasa menerapkan TDD bakal ga asing sama namanya refactoring. Refactoring adalah merupakan tahap untuk memperbaiki code yang telah ada sebelumnya tanpa mengubah fungsionalitas yang ada dan tidak merusak test yang telah dibuat sebelumnya. Bisa disimpulkan refactoring memiliki tujuan untuk membuat clean code, seperti yang telah dijelaskan pada blog post sebelumnya.

Kapan refactor dilakukan?

  • Menambahkan fitur baru
  • Membenarkan bug
  • Saat melakukan code review

Contoh refactoring yang dilakukan di pengembangan sumbang.in

  • Extract Method

Extract method ini dapat dilakukan ketika terdapat code smell seperti long method, duplicated code. Berikut ini adalah contoh code yang dilakukan extracting method. Contoh dibawah ini dilakukan esktraksi ketika mengatur value yang terdapat pada address. Hal ini dilakukan juga karena terdapat bagian kode lain yang akan mengatur value yang terdapat pada address, maka akan lebih baik untuk di ekstraksi untuk menghindari adanya duplikasi code.

Sebelum dilakukan extract method
Sesudah dilakuakn extract method
  • Refactor untuk menerapkan design pattern
Sebelum

Berikut setelah dilakukan refactoring, code menjadi readable dan terlihat rapih.

Sesudah

--

--