Students Save 30%! Learn & create with unlimited courses & creative assets Students Save 30%! Save Now
Advertisement
  1. Code
  2. Android
Code

Cara Mengadopsi Model View Presenter di Android

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called How to Adopt Model View Presenter on Android.
An Introduction to Model View Presenter on Android
Testing and Dependency Injection With Model View Presenter on Android

Indonesian (Bahasa Indonesia) translation by ⚡ Rova Rindrata (you can also view the original English article)

Pada tutorial sebelumnya, kita berbicara tentang pola Model View Presenter, bagaimana penerapannya di Android, dan apa keuntungan terpentingnya. Dalam tutorial ini, kita mengeksplorasi pola Model View Presenter secara lebih rinci dengan menerapkannya di aplikasi Android.

Dalam tutorial ini:

  • kita membangun aplikasi sederhana dengan menggunakan pola MVP
  • kita mengeksplorasi bagaimana menerapkan pola MVP di Android
  • dan kita membahas bagaimana mengatasi beberapa kesulitan yang disebabkan oleh arsitektur Android

1. Model View Presenter

Pola Model View Presenter adalah pola arsitektural yang didasarkan pada pola Model View Controller (MVC) yang meningkatkan pemisahan kekhawatiran dan memfasilitasi pengujian unit. Ini menciptakan tiga lapisan, Model, View, dan Presenter, masing-masing memiliki tanggung jawab yang jelas.

Model View Presenter Layers

Model memegang logika bisnis aplikasi. Ini mengontrol bagaimana data dibuat, disimpan, dan dimodifikasi. View adalah antarmuka pasif yang menampilkan data dan mengarahkan tindakan pengguna ke Presenter. Presenter bertindak sebagai perantara. Ini mengambil data dari Model dan menampilkannya di View. Ini juga memproses tindakan pengguna yang diteruskan oleh View.

2. Perencanaan Proyek & Penyiapan

Kita akan membuat aplikasi catatan sederhana untuk menggambarkan MVP. Aplikasi ini memungkinkan pengguna mencatat, menyimpannya di database lokal, dan menghapus catatan. Untuk membuatnya sederhana, aplikasi hanya akan memiliki satu Activity.

App Layout

Layout AplikasiDalam tutorial ini, kita berkonsentrasi terutama pada implementasi pola MVP. Fungsi lainnya, seperti menyiapkan database SQLite, membangun DAO, atau menangani interaksi pengguna, dilewati. Jika Anda memerlukan bantuan untuk topik ini, Envato Tuts+ memiliki beberapa tutorial hebat tentang topik ini.

Diagram Action dan Lapisan MVP

Mari kita mulai dengan membuat catatan baru. Jika kita memecah tindakan ini menjadi operasi-operasi yang lebih kecil, maka inilah yang akan terlihat seperti menggunakan pola arsitektur MVP:

  • Pengguna mengetik catatan dan mengklik tombol tambah catatan.
  • Presenter membuat objek Note dengan teks yang dimasukkan oleh pengguna dan meminta Model untuk memasukkannya ke dalam database.
  • Model memasukkan catatan di database dan menginformasikan kepada Presenter bahwa daftar catatan telah berubah.
  • Presenter membersihkan field teks dan meminta View untuk menyegarkan daftar untuk menunjukkan catatan yang baru dibuat.
MVP Action Diagram

Antarmuka MVP

Sekarang mari kita pertimbangkan operasi yang dibutuhkan untuk mencapai tindakan ini dan memisahkan dengan menggunakan MVP. Untuk menjaga agar berbagai objek digabungkan secara longgar, komunikasi antar lapisan terjadi dengan menggunakan antarmuka. Kita membutuhkan empat antarmuka:

  • RequiredViewOps: diperlukan operasi View yang tersedia untuk Presenter
  • ProvidedPresenterOps: operasi ditawarkan ke View untuk berkomunikasi dengan Presenter
  • RequiredPresenterOps: diperlukan operasi Presenter yang tersedia untuk Model
  • ProvidedModelOps: operasi ditawarkan ke Model untuk berkomunikasi dengan Presenter
MVP Interfaces

3. Menerapkan MVP di Android

Sekarang kita memiliki gagasan tentang bagaimana berbagai metode harus diatur, kita dapat mulai membuat aplikasi kita. Kita menyederhanakan pelaksanaannya dengan hanya berfokus pada tindakan untuk menambahkan catatan baru. File sumber dari tutorial ini tersedia di GitHub.

Kita hanya menggunakan satu Activity dengan tata letak yang meliputi:

  • EditText untuk catatan baru
  • Button untuk menambahkan catatan
  • RecyclerView untuk mencantumkan semua catatan
  • dua elemen TextView dan Button di dalam pemegang RecyclerView

Antarmuka

Mari kita mulai dengan membuat antarmukanya. Agar semuanya tetap teratur, kami menempatkan antarmuka di dalam holder. Sekali lagi, dalam contoh ini kita fokus pada tindakan untuk menambahkan catatan baru.

Lapisan View

Sekarang saatnya membuat lapisan Model, View, dan Presenter. Karena MainActivity akan bertindak sebagai View, seharusnya mengimplementasikan antarmuka RequiredViewOps.

Lapisan Presenter

Presenter adalah perantara dan perlu menerapkan dua antarmuka:

  • ProvidedPresenterOps untuk mengizinkan panggilan dari View
  • RequiredPresenterOps untuk menerima hasil dari Model

Beri perhatian khusus pada referensi lapisan View. Kita perlu menggunakan WeakReference<MVP_Main.RequiredViewOps> karena MainActivity dapat dihancurkan kapan saja dan kita ingin menghindari kebocoran memori. Juga, lapisan Model belum disiapkan. Kita melakukannya nanti saat kita menghubungkan lapisan MVP bersama-sama.

Lapisan Model

Lapisan Model bertanggung jawab untuk menangani logika bisnis. Ini memegang ArrayList dengan catatan yang ditambahkan ke database, referensi DAO untuk melakukan operasi database, dan referensi ke Presenter.

4. Mengikat Segalanya Bersama-sama

Dengan lapisan MVP di tempat, kita perlu memberi instantiate dan memasukkan referensi yang diperlukan. Sebelum kita melakukannya, kita perlu membahas beberapa masalah yang terkait langsung dengan Android.

Instansiasi Lapisan-lapisannya

Karena Android tidak mengizinkan instansiasi Activity, lapisan View akan diinstansiasikan untuk kita. Kita bertanggung jawab untuk instansiasi lapisan Presenter dan Model. Sayangnya, instansiasi lapisan di luar Activity bisa menjadi masalah.

Dianjurkan untuk menggunakan bentuk injeksi ketergantungan untuk mencapai hal ini. Karena tujuan kita adalah berkonsentrasi pada implementasi MVP, kita akan mengambil pendekatan yang lebih mudah. Ini bukan pendekatan terbaik yang tersedia, tapi ini yang paling mudah dipahami. Kita akan membahas MVP dan injeksi ketergantungan nanti di serial ini.

  • instansiasi Presenter dan Model dalam Activity menggunakan variabel lokal
  • atur RequiredViewOps dan ProvidedModelOps di Presenter
  • atur RequiredPresenterOps di Model
  • simpan ProvidedPresenterOps sebagai referensi untuk digunakan di View

Menangani Perubahan Konfigurasi

Hal lain yang harus kita pertimbangkan adalah siklus hidup Activity. Activity Android dapat dihancurkan setiap saat dan lapisan Presenter dan Model juga bisa dihancurkan dengannya. Kita perlu memperbaikinya dengan menggunakan beberapa jenis keadaan mesin untuk menyimpan keadaan selama perubahan konfigurasi. Kita juga harus menginformasikan lapisan lain tentang status Activity.

Untuk mencapai hal ini, kita akan menggunakan kelas terpisah, StateMaintainer, yang berisi sebuah Fragment yang mempertahankan kondisinya dan menggunakan fragmen ini untuk menyimpan dan mengambil objek kita. Anda bisa melihat implementasi kelas ini di file sumber tutorial ini.

Kita perlu menambahkan metode onDestroy ke Presenter dan Model untuk memberi tahu mereka tentang status Activity saat ini. Kita juga perlu menambahkan metode setView ke Presenter, yang akan bertanggung jawab untuk menerima referensi View baru dari Activity yang diciptakan kembali.

View Lifecycle

Kesimpulan

Pola MVP mampu memecahkan beberapa masalah yang disebabkan oleh arsitektur bawaan Android. Itu membuat kode Anda mudah dipelihara dan diuji. Mengadopsi MVP mungkin terlihat sulit pada awalnya, tapi begitu Anda memahami logika di baliknya, keseluruhan proses itu mudah.

Anda sekarang bisa membuat perpustakaan MVP sendiri atau menggunakan solusi yang sudah tersedia, seperti Mosby atau simple-mvp. Anda sekarang seharusnya lebih memahami apa yang perpustakaan ini lakukan di belakang layar.

Kita hampir di akhir perjalanan MVP kita. Pada bagian ketiga dan terakhir dari seri ini, kami akan menambahkan pengujian unit ke dalam campuran dan menyesuaikan kode kita untuk menggunakan injeksi ketergantungan dengan Dagger. Saya berharap bisa bertemu Anda di sana.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.