Android MVP Design Pattern | #onemonthapp #1 #restrospective

Beberapa waktu kemarin, saya sempat posting tentang #onemonthapp dan karena saya kurang rajin nulis, jadi saya akan cicil dikit2 tentang apa aja point2 dari sisi technical yang saya dapet waktu develop app. Kali ini tentang design pattern MVP di android. tapi sebelumnya kita mulai lewat MVC

MVC – Model View Controller

Sebelumnya, saya biasa develop app android dengan design pattern MVC – Model View Controller. dan ini design pattern yang paling umum, tapi masih aja banyak developer yang abusing design pattern ini, yang penting asal running lah app nya – alhasil… di device yang memory nya limit, bakal sering crash karena outofmemory exception😦

tapi semakin lama berkutat dengan android, saya rasa design pattern ini kurang yahud, karena di android kadang model dengan view susah dipisahkan ke dalam kelas sendiri, misalkan class adapter – class bawaan android. code di class activity bakal nyampur adukin view dan controller disini. Akan banyak debat antar developer – Activity itu Controller atau View? no big deal sih kalo emang mau code nya sedikit messy.

Activty Class di android harusnya ngga extend View Class, tapi pada implementasi code-nya Activity Class ini punya method onCreate, onPause etc yang notabene handle input event dari konsep view. So pada implemetasinya Activity Class ini akan jadi semacem pseudo View-Controller, belum lagi tambahan setContentView yang makin nyampur adukin element UI disini. Tapi bukan berarti MVC ini jelek lho ya, di Java – bukan android, design pattern ini yang paling banyak penganutnya🙂

500px-MVC-Process.svg

dari situ saya coba gugling2 alternatifnya dan nemu blogpost yang cukup oke dari om ini >> antonio leiva monggo di follow twitternya

kalau mau baca sumber aslinya bisa mampir kesini >> http://antonioleiva.com/mvp-android/

MVP – Model View Presenter

simple nya, di MVP ini, activity / fragment atau semua code yang berhubungan dengan framework android dianggap sebagai view. sedangkan View dan Presenter class nya pure java code – apa untungnya? kalo kalian TDD mania, bikin unit test untuk interface jadi lebih indah🙂 dan buat saya TDD ini harga mati!

TDD is the only way to code . . .

image_thumb_1

Diagram diatas, adalah komparasi MVP, MVC dan MVVM. problem yang saya alamin kalau pake MVC itu.. View sama Controller ga bisa jadi kelas yang terpisah, pasti akan kecampur aduk. Kalau di MVP, most likely kita bisa clean pisahin untuk kelas Presenter.java, View.java dan Model.java. Kelebihan lainnya adalah debug screen untuk state UI akan jadi simple disini karena View dan Model terpisahkan secara jelas oleh kelas presenter. in short, di MVP Pemisahan state UI akan lebih rapih.

View – berisi UI components, dan handles events – nya. – totally clean dari controller😉

  • entry point input user
  • rendering component UI
  • routing event ke presenter

Presenter – perantara view dan model, misalnya data dari model kita punya judul, long description, short description dan author, sedangkan di view kita cuma perlu nampilain judul dan short description – disinilah tempat kita ngetikin code untuk pilah-pilahin data yag ditampilin

Model – nah ini tempat kita akses data, akan sangat cakep kalau kita pakai RESTful data dari server. buat support librarynya saya saranin pake Retrofit – nya @squareapp *antek squareapp detected*

cut the crap deh, lebih lengkapnya bisa check sample code dari om antonio >> MVP example – Github

mungkin next time saya share code made in saya untuk lengkapin blog post ini lah *tapi entah kapaaan*. Saya pribadi sih cocok abis ama MVP ini, tapi sekali lagi semua preference🙂 mau code yang rapi atau ngga dan standar rapi tiap orang juga beda-beda.

MVVM

Untuk MVVM sendiri, saya belum pernah experiment tapi design pattern ini famous di kalangan developer javascript.

bye, salam #onemonthapp

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s