Arsitektur MVC vs MVP vs MVVM di Pemrograman Android

Bagus Aji Santoso
4 min readOct 18, 2019

--

Diterjemahkan dari MVC vs MVP vs MVVM architecture in Android

Apa itu Arsitektur?

Dalam konteks pengembangan aplikasi, jika kita mengembangkan sebuah aplikasi dalam struktur yang terorganisir, mengikuti seperangkat aturan, mendeskripsikan fungsi yang jelas serta mengimplementasikannya dengan protokol yang sesuai, maka itu lah sebuah arsitektur.

Peran Arsitektur dalam Pengembangan Aplikasi

Anggap lah kita tidak menggunakan arsitektur apa-apa dan kita menulis kode disetiap kelas/activity/fragment secara acak tanpa organisasi kode yang baik, maka masalah yang mungkin akan dihadapi adalah:

  • Jumlah baris kode akan lebih banyak dan menjadi lebih sulit untuk dipahami
  • Mengurangi keterbacaan kode dan meningkatkan jumlah bugs. Hal ini menyebabkannya sulit untuk di-uji dan mengurangi kualitas

Oleh karena itu, untuk memberikan alur data yang jelas dan menghasilkan aplikasi yang andal, minim bug, mudah dipahami, mudah di modifikasi serta dapat meningkatkan produktivitas programmer, kita perlu memilih arsitektur yang sesuai dan cocok untuk dipakai disebuah tim.

Prinsip-prinsip Arsitektur yang baik Untuk Android

Untuk mendapatkan arsitektur aplikasi yang baik ada beberapa konsep dasar yang mesti diikuti:

  • Separation of concern: Setiap komponen hanya mengerjakan tugasnya masing-masing dengan mendelegasikan tugas-tugas lain pada komponen yang sesuai.

Hal ini dapat dicapai dengan mengikuti Architecture pattern.

  • No Hard dependency: Setiap komponen sebaiknya tidak bergantung secara langsung pada komponen lainnya. Saat akan membutuhkan komponen lain, sebaiknya disiapkan dari luar kelas tersebut. Gunakan Dependency Injections.
  • Manage lifecycle and data persistence: Hal ini dapat dicapai menggunakan Architecture Component.

Architecture pattern:

Software Architectural Design pattern mempromosikan pemrograman yang terorganisir dengan baik. Memisahkan antar fungsi aplikasi membuatnya mudah untuk diuji dan membuat pemeliharaan menjadi lebih sederhana. MVC, MVP, MVVM adalah sebagian pola arsitektur yang paling populer untuk programmer Android.

MVC:

Singkatan dariModel-View-Controller, merupakan arsitektur paling umum. Berikut komponen-komponen yang dipakai di MVC.

Model- Menentukan jenis data dan business logic. Bagaimana mengambil dan manipulasi data, berkomunikasi dengan controller, berinteraksi dengan database, dan sesekali mengupdate view.
View- Merupakan hasil yang dilihat. Dalam pemrograman Android View ini adlah XML-nya. Ia berkomunikasi dengan controller dan sesekali dengan model. Controller- Adalah Activity/Fragment. Ia yang berkomunikasi dengan View atau Model (bisa dalam bentuk database lokal seperti SQLite/Room maupun sistem dari luar melalui REST API).

Cara kerjanya seperti pada gambar:

Kelebihan

  • Businiss logic terpisah dari model
  • Mendukung teknik asinkron
  • Modifikasi yang dilakukan di salah satu komponen tidak mempengaruhi komponen lain.
  • Proses pengembangan lebih cepat

Kekurangan

  • Controller dapat berisi proses yang kelewat besar sehingga sulit dikelola.
  • Unit testing realtif lebih merepotkan.
  • Kompleksitas aplikasi akan terus meningkat.

Pola ini sering dipakai oleh framework web seperti Ruby On Rails, Codeigniter, Angular, Django, dan sebagainya. Contoh kode MVC dapat dilihat di MVC Sample code

MVP:

Merupakan singkatan dari as Model-View-Presenter. Dalam proses pengembangan aplikasi, developer harus memanfaatkan waktu yang ada untuk memilah arsitektur ke dalam lapisan-lapisan. Lapisan tersebut akan membagi dependensi yang biasanya terdapat di view.

Model — Merupakan business logic dan pengelola state suatu data. Mengambil dan memanipulasi data, komunikasi dengan presenter, serta berinteraksi dengan database. Model tidak terhubung langsung dengan view.
View — Terdiri dari komponen UI seperti Activity dan Fragment. Ia hanya berkomunikasi dengan presenter.
Presenter — Sebagai penghubung antara model dengan view. Ia mengatur apa saja yang akan ditampilkan ke view, Ia yang memberitahu si view apa yang mesti muncul. Ia juga yang akan mengirimkan data yang perlu disimpan lewat model.

Perhatikan gambar:

Kelebihan

  • View tidak tahu apa-apa soal apa yang ia tamilkan sehingga layer view bisa diganti dengan lebih mudah.
  • Komponen View dan Presenter yang bisa dipakai ulang (reuse)
  • Kode lebih mudah dipahami dan dikelola
  • Pengujian lebih mudah karena business logic dipisah dari UI

Kekurangan

  • View dan Presenter memiliki hubungan terlalu erat
  • Banyak interface dibutuhkan untuk komunikasi antar layer
  • Ukuran kode bisa menjadi besar

Kalian bisa melihat contoh kode MVP di MVP Sample Code

MVVM:

Adalah Model-View-ViewModel. Ia melonggarkan hubungan antar komponen. Ia juga bekerja dengan konsep observable. Dari satu komponen ke komponen lain tidak terhubung secara langsung melainkan lewat reference yang terdapat di observable.

Model —Memiliki kode untuk business logic serta repositori. Tugas repositori untuk menjembatani request dari ViewModel ke sumber data lokal atau remote.
View — Tidak ada business logic, hanya tampilan yang terhubung dengan user (XML). Aksi user dikirim ke view model tapi tidak akan langsung mendapatkan respons. Untuk mendapatkan responsenya, View akan terima dari ViewModel.
ViewModel —Mayoritas proses yang ada di UI terjadi di komponen ini. Ia tidak perlu tahu view mana yang memanggilnya. Ia hanya memberikan data yang dibutuhkan kepada siapapun yang menghubunginya via observable.

Perhatikan gambar:

Kelebihan

  • Tidak ada hubungan erat antar view dan view model
  • Tidak ada interface antara viwe dan model
  • Mudah untuk menulis unit testing dan kodenya pun event-driven.

Kekurangan

  • Harus membuat observable untuk setiap komponen UI
  • Kode yang ditulis bisa banyak

Kalian bisa mendapatkan sampel kode MVVM dari MVVM Sample Code

Semoga bermanfaat.

--

--

No responses yet