Android Model View Presenter(MVP) with Retrofit and RxJava (Indonesia Version)
Mungkin terlintas pertama kali ketika mendengar singkatan MVP yang dimaksud adalah Minimum Viable Product, namun untuk postingan MVP yang dimaksud berbeda
Pada postingan ini, saya akan menjelaskan mengenai design pattern android model view presenter dan memberikan contoh bagaimana menggunakan MVP
Mengapa menggunakan MVP?
MVP patern bertujuan untuk memisahkan antara business logic dengan view/UI(activity or fragment). Sehingga memudahkan dalam maintain code, menyelesaikan masalah lebih mudah(debugging), penambahan feature yang lebih mudah, menghindari Code Smells, dan sekaligus menerapkan “The Kiss Principle” (KISS = Keep It Simple, Stupid).
Salah satu menghindari Code Smells adalah Large Class. Dengan memisahkan antara business logic dengan view/UI code tidak semua code di taruh ke class Activity atau Fragment.
MVP Sangat disarankan untuk diimplementasikan pada proyek berskala besar dan berjangka panjang.
Pada postingan ini, saya akan menggunakan library sebagai berikut :
- Retrofit 2
Retrofit adalah rest client library yang menggunakan komponen OkHttp untuk android yang di kembangkan oleh Squere. Library ini bekerja dengan baik untuk otentikasi dan berinteraksi dengan API.
2. RxJava
RxJava adalah library untuk menyusun program secara asynchronous. Kenapa enggak ngunain AsyncTask? ini jawabanya
3. ButterKnife
ButterKnife merupakan Dependency Injection yang mirip dengan Android Annotations. Kegunaannya untuk menghubungkan atribut layout dengan class View(Activity atau Fragment).
Agar lebih jelaskan, Saya akan membuat contoh membangun aplikasi menggunakan konsep Model View Presenter. saya akan mencoba menampilkan list dari google api untuk data buku.
Create Project
Pertama buat project baru
Edit build.gradle seperti dibawah ini
Struktur Project
berikut merupakan class
Komponen Model View Presenter
Pembuatan komponen MVP seperti pada gambar dibawah ini
Pertama membuat class BaseActivity.java
Kedua membuat class BaseFragment.java (Opsional, jika ingin menggunakan MVP pada Fragment)
Setelah itu kita akan membuat Base Class untuk Presenter. Buat class BasePresenter.java
Setelah Base class sudah dibuat, saatnya membuat class Mvp untuk Activity and Fragment Class.
Buat class MVP untuk Activity class. (MvpActivity.java)
Buat class MVP untuk Fragment class. (MvpFragment.java)
Komponen Model
Setelah kita membuat komponen untuk MVP, membuat models class dari service Google API Books. Gunakan Generate POJO, install terlebih dahulu plugin POJO. POJO digunakan untuk menconvert JSON ke model class secara mudah.
Cara penggunaannya cukup mudah, seperti dibawah ini
Gunakan hasil JSON dari endpoints ini
https://www.googleapis.com/books/v1/volumes?q=Programming
Hasilnya akan seperti ini
Komponen Networking
Setelah itu, sekarang saatnya membuat komponen class untuk network
Pertama, membuat class NetworkClient.java
Kedua, buat class NetworkCallback.java
Ketiga, buat class NetworkStores.java
Komponen Utils
komponen bantuan/helper dalam aplikasi. ada 3 class
Komponen untuk kemudahan dalam Transition Activity ke Fragment (ActivityUtils.java)
Komponen bantuan untuk kemudahan dalam menggunakan RecyclerView saat pemilihan suatu item pada list (RecyclerItemClickListener.java)
Komponen untuk mengatur ukuran per item pada RecyclewView dengan menggunakan tampilan Grid (GridSpacingItemDecoration.java)
Penggunaan MVP pada Aplikasi
Edit dimens.xml
Edit styles.xml
Buat layout activity_main.xml
Buat item.xml untuk menjadi layout di Adapter pada list data
Buat class untuk menjadi adapter pada list (BookAdapter.java)
Buat Class Activity untuk menampilkan data list dari google API (MainActivity.java)
Buat Class MainView untuk digunakan sebagai View di class MainActivity
Buat Class MainPresenter untuk digunakan sebagai Presenter di class MainActivity
Setelah itu kita bikin feature untuk menampilkan detail dari sebuah buku
Buat Class DetailActivity.java
Buat class DetailView.java untuk menjadi view feature detail
Buat class DetailPresenter.java untuk menjadi presenter feature detail
dan yang terakhir, buat layout detail book (activity_detail.xml)
Demo Aplikasi
Link Github Project : Android MVP