Android Model View Presenter(MVP) with Retrofit and RxJava (Indonesia Version)

Alan Dwi Prasetyo
4 min readJan 23, 2017

--

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 :

  1. 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

--

--