Apakah skema Model-View-Presenter (MVP) berguna untuk Android?

34

Bagaimana memisahkan View dan Presenter di Android, sedangkan reaksi pada aksi pengguna (Presenter part dari MVP) diatur ke dalam aktivitas yang sama yang memperlihatkan elemen GUI (View part of MVP).

"Dalam presenter tampilan model seperti yang dikatakan Martin Fowler atau Michael Feathers [2], logika UI dipisahkan menjadi kelas yang disebut presenter, yang menangani semua input dari pengguna dan yang memberi tahu tampilan" bodoh "apa dan kapan harus display "(dikutip dari sini ).

Sampai sekarang saya berpikir bahwa salah satu fitur utama Android adalah Aktivitas cerdas yang mengambil tindakan, bereaksi terhadap mereka dan menunjukkan hasilnya. Apakah skema MVP bertentangan dengan filosofi Android? Apakah masuk akal untuk mencoba merealisasikannya di Android? Jika ya, bagaimana itu bisa dilakukan?

Gangnus
sumber
2
+1 Pertanyaan bagus karena saya belum melihat mvp / mvvm di sumber aplikasi android. Akan menarik untuk melihat contoh mvp android dan berapa banyak kode / lib overhead yang mereka hasilkan. Masalah ini tidak dibahas di Stackoverflow direkomendasikan-cara-untuk-menghasilkan-aplikasi-portable-antara-android-dan-lainnya-platform
k3b
Mungkin, saya bisa memasukkannya ke dalam Stackoverflow, atau itu melanggar aturan?
Gangnus
Anda dapat meminta salah satu admin untuk memigrasikan pertanyaan ini alih-alih menduplikasi Qestion. Di sini programmers, pertanyaannya adalah pertanyaan yang lebih kontroversial "apa pendapat Anda tentang ../adalah baik atau buruk untuk ..." sementara stackoverflowakan lebih seperti "Apakah ada contoh mvp di android". Bagi saya kedua tempat itu ok.
k3b
Saya sangat menyesal atas ketidakberuntungan saya, tetapi sampai sekarang saya belum menemukan cara untuk terhubung ke admin :-(
Gangnus
Pertanyaan ini TIDAK cocok untuk Stack Overflow. BTW - Anda dapat menghubungi moderator dengan menandai pos Anda menggunakan tautan "bendera".
ChrisF

Jawaban:

15

Aplikasi Android pada dasarnya dibangun di sekitar Model-View-Controller (MVC) - MVP terdengar seperti hal yang sama, meskipun saya belum pernah mendengar istilah sebelumnya. Aktivitas mengisi peran Kontroler, Tampilan XML hanya itu (meskipun Anda dapat membangunnya secara terprogram dalam Aktivitas - itu hanya lebih mudah dan sederhana untuk melakukannya dalam XML), dan Model yang Anda tulis sendiri. Jadi ya, model itu cukup praktis.

Kemungkinan alasan Anda mungkin belum banyak mendengar tentang model desain ini adalah bahwa kerangka kerja Android memaksa Anda untuk memisahkan tampilan. Karena aplikasi pada perangkat seluler cenderung kecil, orang tidak cenderung menggunakan MVC penuh; mereka cenderung melihat dan melihat lapisan tindakan di mana lapisan tindakan melakukan banyak pekerjaan (kecil) model.

Jika Anda menulis aplikasi lintas platform, Anda mungkin ingin melihat pendekatan empat lapis: Lihat, Aksi, Logika Bisnis, dan Model. Lapisan Tampilan dan Tindakan akan spesifik platform, sedangkan Logika dan Model Bisnis tidak akan berubah. Pada dasarnya, Anda membagi presenter dan interaksi pengguna ke lapisan Action, yang memanggil lapisan Business Logic untuk melakukan tindakan yang diinginkan pengguna.

Michael K.
sumber
+1! Tolong, bisakah Anda memberikan satu atau dua referensi untuk beberapa teks yang bagus di atasnya?
Gangnus
4
Saya pikir MVP menawarkan Anda kesempatan untuk menjaga Actionplatform layer (= Presentation) independen, juga - setidaknya, ketika platform Anda yang berbeda menawarkan kemampuan UI yang serupa.
Doc Brown
@DocBrown Secara teori, ya. Dalam praktiknya saya tidak yakin itu akan mungkin terjadi, karena interaksi pengguna bisa mengenai tampilan atau presenter. Misalnya, di Android gesekan ditangani oleh aktivitas, tetapi pada halaman web akan ditangani oleh tampilan (browser).
Michael K
12
"Aplikasi Android pada dasarnya dibangun di sekitar Model-View-Controller" - itu salah pada banyak tingkatan, saya minta maaf. Arsitektur kerangka Android dibangun di sekitar Kelas God di mana logika View / Controller berantakan.
Igor Filippov
2
Saya berharap saya dapat meningkatkan komentar @ IgorFilippov lebih dari sekali. Gagasan bahwa aplikasi Android menerapkan MVC oleh desain adalah kesalahpahaman umum. Berlawanan dengan iOS, tidak ada arsitektur GUI yang dipaksakan oleh Android dengan pemisahan keprihatinan yang jelas dan memungkinkan Model yang terisolasi dan mudah diuji. Anda harus menyediakannya sendiri, baik itu MVP, MVC atau yang lainnya.
Piovezan
6

Saya tidak memiliki pengalaman dalam pemrograman Android, tetapi memiliki pandangan singkat ke beberapa tutorial pemrograman Android pengantar, saya tidak melihat alasan mengapa MVP harus kurang berguna seperti dalam kerangka acara lainnya. The Activitykelas tidak jauh berbeda dari Dialogatau Formdalam framework lain, sehingga harus mudah untuk menciptakan sebuah "activitity Presenter" kelas untuk setiap subclass Kegiatan aplikasi Anda dan menempatkan logika inti sana.

Acara yang dikirimkan ke "Aktivitas" Anda harus didelegasikan ke presenter Anda, dan jika presenter Anda akan mengirim acara sendiri, atau memanggil fitur lain yang bergantung pada sistem, Aktivitas Anda harus menyediakan fungsi terkait melalui antarmuka yang dibagikan dengan presenter. Tapi itu pada dasarnya sama dengan kerangka GUI lain yang saya tahu.

Doc Brown
sumber
+1 terima kasih atas waktu Anda. Namun seperti yang Anda lihat dari jawaban lain, di Android digunakan model yang serupa, tetapi berbeda. "Aku berbicara dengan prosa selama 50 tahun dan tidak tahu tentang itu!" Sekarang saya akan mencoba melihat perbedaan model.
Gangnus
4
@ Gangnus: MVP adalah bentuk khusus dari MVC, di sini codebetter.com/jeremymiller/2007/07/26/… Anda menemukan informasi lebih lanjut. Dan saya cukup yakin ini bukan masalah "MVC atau MVP". Kegiatan mungkin merupakan bentuk "pengontrol", tetapi mereka bergantung pada platform. Memisahkan logika UI ke kelas presenter independen platform untuk setiap aktivitas mungkin akan membuatnya lebih mudah diuji unit dan lebih portabel.
Doc Brown
5

MVP pasti bermanfaat untuk Android. Ini membantu untuk mengatur dan menguji unit kode Anda. Dan bagian terbaiknya adalah orang-orang baru yang membaca kode Anda akan dapat memahami kode tersebut dan akan mulai berkontribusi segera setelah mereka tahu apa yang harus pergi ke mana. Berikut adalah tautan yang sangat membantu untuk memahami MVP dengan contoh-contoh .

Berikut adalah penjelasan singkat tentang ketiga komponen MVP

Melihat

Di Android MVP, sebuah view berisi dua hal, Activity - android resource View - java interface Activity Menerapkan View dan menyuntikkan dirinya sendiri (View interface) dalam presenter sehingga presenter dapat berbicara dengan aktivitas menggunakan tampilan antarmuka. Tiga blok pertama diagram menunjukkan komunikasi antara View dan The Presenter.

Pembawa acara

Presenter bertindak sebagai lapisan tengah antara View dan Data / Model. View (Activity) memerintahkan presenter untuk menyajikan sesuatu dan presenter kemudian mengambil data dari database / Model dan memberikan kembali bentuk data yang dapat ditampilkan ke View. Lihat lalu berhati-hati menampilkan data itu di layar. Dan ingat bahwa Presenter adalah kelas java biasa, seharusnya tidak termasuk komponen android jika tidak akan membuat pengujian unit presenter sulit.

Jika Anda ingin menggunakan database di presenter maka buat aktivitas membuat instance database dan menyuntikkannya dalam presenter. Ini akan membantu Anda untuk mengejek basis data saat pengujian unit dan akan memungkinkan Anda untuk menguji logika bisnis.

Model

Model dalam MVP tidak lain adalah sumber data Anda. Lihat tidak berbicara dengan data secara langsung melainkan memerintahkan Presenter untuk menangani data untuk itu dan memberikan informasi kembali yang dapat ditampilkan tanpa modifikasi lebih lanjut.

Ajit Singh
sumber
1
Info berguna, terima kasih, tetapi diberikan dengan cara yang buruk. Anda seharusnya tidak hanya mengutip situs, bahkan situs Anda sendiri, tetapi juga memberikan info di sini. Jawaban referensi tidak diizinkan. Gunakan komentar sebagai gantinya. Saya tidak menandai hanya karena info berguna di situs Anda. Silakan, ubah menjadi komentar atau masukkan jawaban beberapa info kunci yang menjawab isi pertanyaan. Maka pasti Anda akan mendapatkan tidak hanya nilai tambah saya, tetapi bahkan jawaban cek.
Gangnus
@ Gangnus Saya telah memberikan informasi yang diperlukan dalam jawaban karena meletakkan semua konten akan membuat jawabannya sangat besar.
Ajit Singh
1
Sebenarnya ada dua jenis MVP. Tampilan Pasif (apa yang Anda jelaskan di sini) dan Supervising Presenter, yang memungkinkan penyatuan data langsung dari tampilan ke model (seperti MVVM dan banyak kerangka kerja web MVC).
RubberDuck