Activity dan Fragment Bukanlah View di Model-View-Presenter


 

Semua berawal saat saya membeli course di Udemy tentang Android Architecture Masterclass dan melihat DroidCon Berlin. Di situ banyak sekali dibahas mengenai MVx presentation layer pattern (fun fact: MVP, MVC, MVI, MVVM adalah pattern di level presentation, bukan architecture pattern, saya juga dulu salah menyebut mereka sebagai architecture pattern). Dalam course tersebut ditekankan bahwa Activity atau Fragment yang ada di android bukan bertindak sebagai View dalam MVP.


Saya jadi teringat beberapa hal dan artikel yang pernah saya tulis mengenai Model-View-Presenter di android beberapa tahun yang lalu. Saya juga banyak sharing dengan teman-teman saya mengenai hal tersebut, namun setelah mengetahui bahwa yang saya sharing saat itu ternyata tidak bisa dikatakan benar, maka dari itu saya ingin sedikit menjelaskannya di sini.


Penerapanku Dulu

Saya rasa semua orang sudah tau bentuk MVP pada umumnya, yakni membuat sebuah interface mengenai apa-apa saja yang dapat dilakukan oleh sebuah view dan presenter. Lebih jelasnya seperti pada gambar-gambar di bawah ini.






Lalu?

Context di android adalah sebuah God Class, dan context ini ada di mana-mana, baik activity fragment dan lain-lain. Hal ini membuat banyak logic-logic yang saling bergantung di dalamnya akan sulit dilakukan dengan cara lama seperti gambar di atas. Karena hal ini juga, membuat activity / fragment yang kita anggap sebagai View justru lebih powerful ketimbang si Presenter itu sendiri.

Sedangkan passing context ke presenter akan sangat aneh karena kita berusaha untuk tidak menggabungkan antara UI dan Logic.


Pendekatan Yang Berbeda?

Simpelnya, tinggal dibalik saja. Yang dulu seperti ini:

- MainActivityPresenter (yang berperan sebagai presenter)

- MainActivity (yang berperan sebagai view)

dibalik menjadi seperti ini:

- MainActivity (berperan sebagai presenter)

- MainActivityView (berperan sebagai view)


Lalu bagaimana inflating layout, menambahkan listener pada view, komunikasi antar keduanya bagaimana? Saya berikan screenshot soal penerapan sederhana dan juga github repository yang bisa di lihat di sini.




Penerapan di atas adalah contoh yang sudah saya sederhanakan dengan membuang retusan baris code yang diberikan di course yang saya beli supaya lebih mudah dipahami dan dapat insightnya. Di dalam course tersebut juga dipisahkan lagi antara activity dengan controller (jadi, controller akan dibuat lagi sendiri secara terpisah supaya activity lebih ramping, tapi intinya sebenarnya sama saja). Saya sendiri tidak menggunakan Model-View-Presenter di android.

Post a Comment

0 Comments