Apa saja perbaikan MVP dibandingkan MVC?

49

Saya telah membaca selama tiga hari tentang pola Model-View-Controller (MVC) dan Model-View-Presenter (MVP) . Dan ada satu pertanyaan yang sangat mengganggu saya. Mengapa perancang perangkat lunak menciptakan MVP, padahal sudah ada MVC?

Masalah apa yang mereka hadapi, yang MVC tidak pecahkan (atau pecahkan dengan buruk), tetapi MVP bisa pecahkan? Masalah apa yang ingin diselesaikan oleh MVP?

Saya telah membaca banyak artikel tentang sejarah dan penjelasan MVP, atau tentang perbedaan antara MVC dan MVP, tetapi tidak ada yang memiliki jawaban yang jelas untuk pertanyaan saya.

Di salah satu artikel yang saya baca, dikatakan:

Sekarang ke Model View Presenter, yang merupakan respons terhadap kekurangan pola MVC ketika diterapkan pada antarmuka pengguna grafis berbasis komponen modern. Dalam sistem GUI modern, komponen GUI sendiri menangani input pengguna seperti gerakan mouse dan klik, daripada beberapa pengontrol pusat.

Jadi, saya tidak bisa mengerti, tetapi bisakah sebenarnya dengan cara lain, sehingga komponen GUI tidak menangani input pengguna sendiri? Dan apa sebenarnya artinya "menangani sendiri"?

Pemenang
sumber
4
Saya pikir itu hanya "Pakaian Baru Kaisar", kata kunci baru dari Mickeysoft.
qwerty_so
4
Victor, apakah Anda memiliki pertanyaan khusus selain "mengapa ada dua pola yang berbeda?" Ada dua pola yang berbeda karena mereka memecahkan masalah yang sama dengan dua cara yang agak berbeda. Jika itu membantu, Model dan Tampilan pada dasarnya sama di kedua pola. Fokus pada perbedaan antara Pengontrol dan Presenter. Anda dapat menemukan bantuan lebih lanjut di sini: linkedin.com/pulse/…
Robert Harvey
18
"Aku sudah membaca selama tiga hari tentang pola MVC dan MVP." Astaga. Saya sarankan Anda pergi mandi air panas santai atau melewatkan beberapa batu di kolam penuh bebek atau sesuatu. Pembacaan semacam itu dapat, tanpa adanya aplikasi praktis, benar-benar melelehkan otak Anda!
user1172763
11
Cara Anda mendapatkan jenis jawaban yang Anda inginkan adalah dengan membangun sesuatu menggunakan pola-pola ini. Maka Anda akan tercerahkan.
Robert Harvey

Jawaban:

63

MVC secara konseptual elegan:

  • input pengguna ditangani oleh pengontrol
  • controller memperbarui model
  • model memperbarui tampilan / antarmuka pengguna
           +---+
      +----| V |<----+
user  |    +---+     | updates
input |              |
      v              |
    +---+          +---+
    | C |--------->| M |
    +---+ updates  +---+

Namun: Aliran data dan peristiwa di MVC berbentuk lingkaran. Dan tampilan akan sering mengandung logika yang signifikan (seperti penangan kejadian untuk tindakan pengguna). Bersama-sama, sifat-sifat ini membuat sistem sulit untuk diuji dan sulit untuk dipelihara.

Arsitektur MVP menggantikan controller dengan presenter, yang memediasi antara tampilan dan model. Ini linierkan sistem:

       user input         updates
+---+ -----------> +---+ --------> +---+
| V |              | P |           | M |
+---+ <----------- +---+ <-------- +---+
        updates            updates

Ini memiliki keuntungan sebagai berikut:

  • Logika (seperti penangan kejadian dan status antarmuka pengguna) dapat dipindahkan dari tampilan ke presenter.

  • Antarmuka pengguna dapat diuji unit dalam hal presenter, karena menggambarkan kondisi antarmuka pengguna. Di dalam unit test, kami mengganti tampilan dengan driver tes yang melakukan panggilan ke presenter.

  • Karena antarmuka pengguna terisolasi dari logika aplikasi, keduanya dapat dikembangkan secara mandiri.

Tetapi ada juga beberapa kelemahan dari pendekatan ini:

  • Itu membutuhkan lebih banyak usaha.
  • Presenter dapat dengan mudah bermutasi menjadi "kelas dewa" yang tidak dapat dipelihara.
  • Aplikasi tidak memiliki sumbu MVP tunggal, tetapi beberapa sumbu: satu untuk setiap layar / jendela / panel di antarmuka pengguna. Ini bisa menyederhanakan arsitektur Anda atau membuatnya terlalu rumit.
amon
sumber
7
Jawaban yang bagus, tetapi MVC zaman modern umumnya tidak banyak menggunakan event handler, kecuali mungkin untuk validasi formulir lokal, dan saya tidak menganggap peristiwa itu bagian dari MVC yang tepat. Itu sebabnya kami memiliki MVP dan MVVM. MVC pada dasarnya adalah sisi server.
Robert Harvey
@amon, terima kasih atas jawaban Anda, ia mengatakan banyak hal kepada saya. Dan Anda menyebutkan, bahwa memiliki beberapa sumbu dalam aplikasi dapat menyederhanakan arsitektur. Saya memenuhi gagasan itu di banyak makalah, dan ada disebutkan, sebagai salah satu alasan utama untuk menemukan MVP, karena MVC tidak cocok dengan persyaratan GUI yang kompleks. Yaitu, mana persyaratan MVP yang cocok, dan bagaimana itu memenuhi persyaratan itu? Maaf karena terlalu gigih, tapi SAYA BENAR-BENAR tongkat untuk memahaminya dengan baik.
Victor
4
@ Viktor Tidak ada pola terbaik, tetapi pengorbanannya berbeda. MVC dapat menjadi pasangan untuk persyaratan yang rumit. Dalam hal arsitektur, MVP memberlakukan hubungan 1: 1 antara tampilan dan penyaji: setiap tampilan memiliki penyaji sendiri, setiap penyaji terhubung ke satu tampilan. Dalam MVC, ada hubungan n: m: Satu tampilan dapat mengirim input pengguna ke beberapa pengontrol yang berbeda, dan satu pengontrol dapat menerima input dari banyak tampilan. Itu lebih fleksibel, tetapi juga lebih kacau - tidak ada "sumbu" yang jelas di MVC.
amon
1
@ Viktor Saya tidak punya banyak pengalaman dengan GUI, jadi mungkin ada banyak yang tidak saya sebutkan. GUI terakhir yang saya lakukan adalah kekacauan mutlak karena saya tidak tahu tentang MVP pada saat itu - aliran data & kontrol linierisasi akan menjadi peningkatan besar.
amon
9
@ RobertTarvey Saya berpendapat bahwa apa yang disebut web "MVC" tidak pernah benar-benar "MVC" dengan definisi asli sama sekali. Siapa pun yang membajak akronim harus dipukul terbalik karena memilih istilah dimuat dan membingungkan semua orang.
jpmc26
6

Dalam MVP, Presenter menggantikan Controller MVC. Perbedaan antara keduanya adalah bahwa Presenter secara langsung memanipulasi Tampilan. Ini dirancang untuk kerangka kerja UI yang terutama didorong oleh peristiwa (seperti Windows Forms) tanpa dukungan berat untuk pengikatan data yang kaya yang akan mendukung pola MVVM (seperti WPF). Kalau tidak, banyak logika untuk mengelola kondisi tampilan dan memperbarui model dukungan akan terletak pada tampilan itu sendiri.

Michael Brown
sumber