Selamat datang di lereng yang licin. Anda pada titik ini menyadari bahwa ada variasi tanpa akhir dari semua interaksi model-view. MVC, MVP (Taligent, Dolphin, Passive View), MVVM hanya untuk beberapa nama.
Pola Presenter Model View, seperti kebanyakan pola arsitektur terbuka untuk banyak variasi dan eksperimen. Satu hal yang sama dari semua variasi adalah peran presenter sebagai "perantara" antara tampilan dan model. Dua yang paling umum adalah Tampilan Pasif dan Presenter / Pengawas Pembimbing - [ Fowler ]. Tampilan Pasif memperlakukan UI sebagai antarmuka yang sangat dangkal antara pengguna dan presenter. Ini mengandung sangat sedikit jika ada logika, mendelegasikan banyak tanggung jawab kepada presenter. Mengawasi Presenter / Pengendalimencoba mengambil keuntungan dari pengikatan data yang dibangun dalam banyak kerangka UI. UI menangani sinkronisasi data tetapi langkah presenter / controller untuk logika yang lebih kompleks. Dalam kedua kasus model, tampilan dan penyaji membentuk triad
Ada banyak cara untuk melakukan ini. Sangat umum untuk melihat ini ditangani dengan memperlakukan setiap dialog / form sebagai tampilan yang berbeda. Sering kali ada hubungan 1: 1 antara pandangan dan presenter. Ini bukan aturan yang keras dan cepat. Sangat umum untuk memiliki satu presenter menangani banyak pandangan terkait atau sebaliknya. Itu semua tergantung pada kompleksitas pandangan dan kompleksitas logika bisnis.
Adapun bagaimana pandangan dan penyaji mendapatkan referensi satu sama lain, ini kadang-kadang disebut kabel . Anda memiliki tiga pilihan:
View memegang referensi ke presenter
A form atau dialog yang mengimplementasikan view. Formulir ini memiliki pengendali acara yang melakukan delade ke presenter menggunakan panggilan fungsi langsung:
MyForm.SomeEvent(Sender)
{
Presenter.DoSomething(Sender.Data);
}
Karena presenter tidak memiliki referensi ke tampilan, view harus mengirimkan data sebagai argumen. Presenter dapat berkomunikasi kembali ke tampilan dengan menggunakan acara / fungsi panggilan balik yang harus didengarkan oleh view.
Presenter memegang referensi untuk melihat
Dalam skenario tampilan memperlihatkan properti untuk data yang ditampilkan kepada pengguna. Presenter mendengarkan acara dan memanipulasi properti pada tampilan:
Presenter.SomeEvent(Sender)
{
DomainObject.DoSomething(View.SomeProperty);
View.SomeOtherProperty = DomainObject.SomeData;
}
Keduanya memegang referensi satu sama lain membentuk ketergantungan sirkuler.
Skenario ini sebenarnya lebih mudah untuk dikerjakan dibandingkan yang lain. Tampilan merespons acara dengan memanggil metode di presenter. Presenter membaca / memodifikasi data dari tampilan melalui properti yang terbuka.
View.SomeEvent(Sender)
{
Presenter.DoSomething();
}
Presenter.DoSomething()
{
View.SomeProperty = DomainObject.Calc(View.SomeProperty);
}
Ada masalah lain yang harus dipertimbangkan dengan pola MVP. Urutan penciptaan, masa hidup objek, di mana pengkabelan berlangsung, komunikasi antara triad MVP tetapi jawaban ini telah berkembang cukup lama.