Is it possible to use VIPER Architecture on Android?

Yoga C. Pranata
Tunaiku Tech
Published in
3 min readJul 16, 2018

Sebagai developer khususnya developer Android, pasti kalian pernah ketemu (minimal pernah denger) arsitektur MVVM, MVP, maupun Clean Architecture nya Uncle Bob. Tujuan dari masing-masing arsitektur tersebut adalah supaya code kita tetap clean, maintainable, mudah dipahami oleh yang lain, dan yang paling penting menghindari situasi Massive-View-Controller.

What is VIPER and why we use it?

VIPER itu sendiri adalah singkatan dari View Interactor Presenter Entity Router yang merupakan classes yang memiliki tugasnya masing-masing, sesuai dengan prinsip Single Responsibility Principle.

Saya biasanya menggunakan arsitektur MVP saat membuat aplikasi Android, tapi kelemahannya saat aplikasi tersebut semakin besar, bussiness logic maupun methods yang sudah kita buat di presenter jadi semakin besar dan semakin susah untuk di maintain. Itulah mengapa Saya beralih menggunakan VIPER.

Let’s start

Saya mencoba hal baru dengan membuat project baru yang menerapkan konsep VIPE (atau bisa disebut MVP + Interactor). Dari konsep Clean Architecture nya Uncle Bob, kita tahu ada istilah Interactor (Use Cases), tugas dari Interactor ini adalah untuk memisahkan bussiness rule, Query DB maupun API dari Presenter kedalam Interactor ini. Jadi tugas Presenter dikhususkan untuk UI Handling dan menampilkan data yang dikirim oleh Interactor ke View.

Saya coba membuat sebuah interfaces, yang fungsinya mendeklarasikan fungsi-fungsi yang akan dipakai untuk setiap modul. Dan agar tidak bisa mendeklarasikan method lain jika belum dideklarasikan didalam interfaces tersebut. Tujuannya untuk membantu mendefinisikan responsibility yang jelas untuk setiap module.

Dibawah ini adalah contoh class yang mengimplementasikan interfaces diatas:

Kalian juga bisa lihat kalau modules di-inisialisasi pertama kali. Presenter sudah di define terlebih dahulu sebagai UI-Handling. Dan di Presenter juga menginisialisasi Interactor dan mem-passing data dari Interactor ke Presenter melalui InteractorOutput.

VIPE + Router

Terdapat beberapa navigasi dari View yang seharusnya tidak menjadi responsibility dari View tersebut, oleh karena itu kita libatkan Router sebagai jawaban untuk masalah ini.

Kita ubah Interfaces yang telah dibuat sebelumnya:

Sekarang kita sudah pindahkan navigasi goToOtpPage ke Router dan hanya butuh satu inputan yaitu Activity. Cara implementasinya seperti berikut:

Struktur data yang saya gunakan untuk membuat aplikasi ini adalah:

Conclusion

Dengan implementasi MVP + Interactor + Router (VIPER), Kita bisa katakan kalau arsitektur ini bisa bekerja dengan baik di Android. Lebih bisa di-maintain dan lebih terdokumentasi dengan baik dan bisa dijadikan acuan development karena arsitektur ini memperjelas dimana seharusnya Kita menulis code.

Sekian penjelasan tentang VIPER ini.

See you in the next article. :)

--

--