Bagaimana membuat aplikasi android dengan arsitektur MVP ?
Halooo.. Beberapa waktu yang lalu salah seorang junior saya dikampus dulu bertanya mengenai pengembangan aplikasi Android menggunakan arsitektur MVP. Setelah memberi beberapa penjelasan singkat kepada dia, saya menjadi tertarik untuk membuat beberapa tulisan mengenai pengembangan aplikasi Android dengan arsitektur MVP. Mungkin sudah banyak sumber yang dapat kita jadikan referensi membuat aplikasi Android dengan arsitektur MVP, tetapi tidak ada salahnya saya juga menulisnya, bukan? 😃 Tulisan-tulisan yang saya buat kali ini merupakan sebuah seri yang saya beri judul “Android MVP Series”. Nah, oke mari kita mulai saja.
Apa itu MVP Arsitektur?
Model-View-Presenter atau yang biasa disingkat menjadi MVP adalah sebuah konsep arsitektur pengembangan aplikasi yang memisahkan antara tampilan aplikasi dengan proses bisnis yang bekerja pada aplikasi. Arsitektur ini akan membuat pengembangan aplikasi kita menjadi lebih terstuktur, mudah di-test dan juga mudah di-maintain.
Berikut penjelasan masing-masing layer pada MVP. - View, merupakan layer untuk menampilkan data dan interaksi ke user. View biasanya berupa Activity, Fragment atau Dialog di Android. View ini juga yang langsung berkomunikasi dengan user. - Model, merupakan layer yang menunjuk kepada objek dan data yang ada pada aplikasi. - Presenter, merupakan layer yang menghubungkan komunikasi antara Model dan View. Setiap interaksi yang dilakukan oleh user akan memanggil Presenter untuk memrosesnya dan mengakses Model lalu mengembalikan responnya kembali kepada View.
Pada penjelasan diatas, pemisahan kode program berdasarkan fungsi dapat membuat struktur kode kita lebih rapi dan tentu saja lebih mudah di-test. Seperti yang kita ketahui, berbagai View yang kita gunakan biasanya bergantung keras (tighly-coupled) dengan library Android, sehingga kita akan kesulitan untuk melakukan testing pada aplikasi kita, misalnya unit testing. Dengan struktur pengembangan aplikasi ini, kita dapat membuat aplikasi kita lebih maintainable dan testable.
Bagaimana Implentasinya?
Pada seri tulisan saya kali ini, saya membuat sebuah proyek sederhana yang akan menjadi acuan saya dalam menulis setiap part-nya. Selain itu saya juga memakai beberapa library yang memudahkan dalam membuat aplikasi Android, yaitu: - Butter Knife, merupakan library yang membantu untuk menyederhanakan penulisan komponen view di Android. Biasanya saat mendeklarasikan sebuah komponen view, maka kita akan memakai findViewById. Dengan butter knife penulisannya akan lebih sederhana. - Dagger, merupakan library yang digunakan untuk proses Injection pada aplikasi kita. Merupakan penerapan Dependency Injection. Biasanya saat membuat sebuah objek, kita juga membutuhkan objek lain pada instansiasi objek tersebut, jika tanpa dependency injection maka setiap kita melakukan instansiasi objek maka kita juga harus membuat objek-objek yang lain dibutuhkan sehingga kode kita akan kotor dan sulit dipahami.
Selain memakai arsitektur MVP, aplikasi Android yang saya bangun juga menerapkan Repository Pattern. Yang dimaksud dengan Repository disini adalah sebuah abstraksi dari data layer yang berfungsi mengatur aliran data pada aplikasi. Repository ini biasanya berupa sebuah interface yang memiliki beberapa method dimana class yang mengimplementasikannya akan mengimplementasikan method-nya juga. Repository inilah yang nantinya akan dipakai oleh presenter untuk proses pengolahan data.
Contract Class
Nah, misalnya seperti contoh aplikasi yang saya bangun disini, aplikasi List Film. Pada aplikasi ini kita dapat melihat daftar film yang disediakan oleh API Studio-Ghibli. Pertama kita dapat membuat sebuah activity atau fragmentsebagai tampilan aplikasi kita.
Disini belum ada implementasi antara presenter dan view. Untuk membuatnya, mari kita deklarasikan sebuah Contract Class yang merupakan sebuah interface, dimana didalam class ini kita akan membuat interface Presenter dan View yang nantinya akan dipakai oleh View yang tadi. Sebelumnya saya juga membuat sebuah Base class untuk Presenter dan View yang berisikan method umum.
public interface BaseView<T> { void setPresenter(T presenter); }
public interface BasePresenter { void start(); }