MVVM paling umum digunakan dengan WPF karena sangat cocok untuk itu. Tapi bagaimana dengan Windows Forms? Apakah ada pola pendekatan / desain yang mapan dan umum digunakan seperti ini untuk Windows Forms juga? Salah satu yang bekerja dengan baik dengan Windows Forms? Apakah ada buku atau artikel yang menggambarkan hal ini dengan baik? Mungkin berbasis MVP atau MVC?
winforms
design-patterns
bitbonk
sumber
sumber
Jawaban:
Saya telah mencoba MVP dan tampaknya berfungsi baik dengan bentuk windows juga. Buku ini memiliki contoh formulir windows dengan pola MVP (contoh aplikasi penggajian). Aplikasi ini tidak begitu rumit tetapi akan memberi Anda ide tentang bagaimana cara membuatnya.
Prinsip, Pola, dan Praktek Agile di C # ...
Anda bisa mendapatkan kode sumber di Kode Sumber
EDIT:
Ada dua variasi pola MVP (a) Tampilan pasif dan (b) pengawas pengawasan
Untuk skenario penyatuan data yang kompleks, saya lebih suka menggunakan pola pengontrol Supervising. Dalam mengawasi pola pengontrol, tanggung jawab penyatuan data terletak pada tampilan. Jadi, untuk treeview / datagrid ini harus dalam pandangan masing-masing, hanya tampilan logika agnostik yang harus dipindahkan ke presenter.
Saya akan merekomendasikan melihat kerangka MVP berikut MVC # - Kerangka MVP
Jangan menggunakan namanya (ini merupakan kerangka kerja MVP).
Winforms sederhana MVP video Winforms - MVP
Contoh berurusan dengan daftar dropdown MVP - DropDownList
Contoh pengikatan treeview sederhana (penjilidan orang miskin). Anda dapat menambahkan logika khusus tampilan pohon di BindTree ().
Di bawah ini adalah cuplikan kode .... tidak diuji, langsung dimasukkan dari pikiran ....
sumber
Seperti yang sudah dikatakan, saya selalu bekerja dalam pola MVP saat menggunakan WinForms. Namun pola desain yang akan Anda gunakan bukan berarti Anda akan menggunakannya dengan benar. Ada banyak anti-pola yang melekat pada MVP.
Jika Anda ingin memulai semuanya dengan cara yang baik, Anda harus menggunakan kerangka kerja untuk membangun klien yang cerdas. Jadi saya akan merekomendasikan untuk menggunakan desain dan praktik itu: Smart Software Software Factory http://www.codeplex.com/smartclient
Anda memiliki diskusi di sini tentang kerangka kerja klien pintar saat ini: http://codebetter.com/blogs/glenn.block/archive/2008/05/10/prism-cab-and-winforms-futures.aspx
PS: Saya suka posting ini di anti-pola MVP: http://blog.mattwynne.net/2007/06/13/mvp-smells/
Semoga ini membantu
sumber
Pola Model-View-ViewModel (MVVM) adalah pola desain. Per definisi pola desain menunjukkan solusi umum di dunia berorientasi objek dan solusi ini dapat diterapkan di berbagai platform (WPF, WinForms, Java Swing, dll.). Saya setuju bahwa MVVM paling baik digunakan dengan WPF karena memanfaatkan kemampuan pengikatan yang kuat. Namun, Formulir Windows juga mendukung pengikatan data.
The WAF Windows Forms Adapter menunjukkan bagaimana menerapkan Pola MVVM dalam Bentuk aplikasi Windows.
sumber
Saya telah menulis tentang variasi pola desain MVP / MVVM yang disebut MVP-VM, yang merupakan solusi yang dibuat khusus untuk aplikasi winform yang membutuhkan cakupan pengujian penuh dan menggunakan pengikatan data sebagai mekanisme utama untuk menjaga presentasi diperbarui dengan data model.
MVVM untuk .NET Winforms
sumber
Saya mengajukan pertanyaan yang sama kepada dua rekan kerja teknisi saya: apakah MVVM untuk WindowsForms mungkin? Keduanya memberi saya jawaban yang sama persis: " Tidak mungkin! WindowsForms kehilangan ikatan kaya WPF dan Silverlight (OneTime, OneWay, TwoWay, OnewayToSource) dan juga tidak ada TypeConverters ."
Sekali lagi, dapatkah kita memiliki MVVM untuk WinForms? Ya kita bisa. Kami memiliki semua bagian. Kami hanya harus menempelkannya bersama.
sumber
Saya percaya bahwa MVP adalah pola yang sangat cocok untuk pengembangan WinForms - seperti sebagian dibuktikan dengan penggunaannya dalam CAB - kerangka kerja Microsoft untuk WinForms.
Saya menggunakan MVP di WinForms untuk mengekstrak kode dari tampilan - karena saya tidak dapat menguji kode tampilan. Dan juga untuk mengaktifkan kode yang perlu digunakan kembali (atau diduplikasi) untuk tetap keluar dari View di mana ia tidak dapat dibagikan.
Saya bisa merujuk ke proyek saya sendiri di mana saya menggunakan pola MVP ExceptionReporter.NET . Meskipun saya yakin saya tidak menggunakannya dengan sempurna.
Anda menyebutkan MVVM bekerja untuk WPF - Saya pikir alasannya adalah karena dukungan pengikatan data yang kuat. Jika Anda tidak menggunakan data-binding di WPF (dan itu tentu tidak wajib) maka Anda bisa memilih MVP. Intinya adalah bahwa MVP adalah pilihan yang kuat untuk aplikasi sisi klien. Dan mungkin pilihan yang 'lebih baik', bahkan di WPF, jika Anda berencana untuk berbagi kode antar proyek yang bukan WPF.
Untuk bukti lebih lanjut tentang nilai menggunakan MVP di WinForms, lihat presentasi video Boodhoo tentang penggunaan MVP: http://www.bestechvideos.com/2008/06/29/dnrtv-show-14-jean-paul-boodhoo-on-model -view-presenter Dan artikel MSDN oleh penulis yang sama di http://msdn.microsoft.com/en-us/magazine/cc188690.aspx
sumber
Desain ini bukan tentang menyembunyikan model, melainkan dengan tepat mendefinisikan interaksi antara berbagai lapisan aplikasi. Anda dapat mengubah backend sepenuhnya dan selama Anda melewati Model melalui Bindtree, UI Anda akan terus bekerja.
Sekarang Model kelas mungkin merupakan pilihan nama yang buruk dalam contoh yang diberikan Rajesh. Itu bisa TreeData, atau RecordsData. Bagaimanapun Anda mendefinisikannya, ia memiliki apa yang Anda perlukan untuk menggunakan mekanisme pengikatan Winforms untuk mengikat kontrol spesifik ke data yang mendasarinya.
Situs terbaik untuk menelusuri materi semacam ini ada di sini . Martin Fowler telah mengumpulkan berbagai pola desain UI yang berguna dan pola desain perusahaan.
Sekali lagi kunci untuk ini adalah penggunaan antarmuka untuk secara tepat menentukan bagaimana setiap lapisan berinteraksi satu sama lain.
Dalam aplikasi saya sendiri (aplikasi CAD / CAM yang digunakan untuk menjalankan mesin pemotong logam) struktur saya terlihat seperti ini.
sumber
Anda bisa menggunakan Arsitektur, Pola, dan Praktik Perusahaan sebagai titik awal, meskipun sedikit ketinggalan zaman.
Di bawah Panduan Umum terdapat Arsitektur Aplikasi untuk .NET: Merancang Aplikasi dan Layanan , yang merupakan pengantar yang baik untuk cara .NET dan aplikasi lapis-lapis N.
alt teks http://i.msdn.microsoft.com/ms954595.f00aa01%28en-us%2CMSDN.10%29.gif
Untuk "pola" yang lebih formal, ada Pola Solusi Perusahaan Menggunakan Microsoft .NET . (sumber: microsoft.com )
Untuk beberapa nama,
sumber
Penjelasan bagus pertama dari pola desain UI yang saya baca ada di blog Jeremy Miller - Membangun CAB Anda Sendiri . Ini menjelaskan pola umum - Tampilan Pasif, MVP, dll. Dan membahas beberapa cara Anda dapat menerapkannya dalam C #.
sumber
Anda dapat mencoba MugenMvvmToolkit yang memungkinkan untuk menggunakan "MVVM murni" untuk WinForms. Karena itu mendukung binding di semua platform, semua fitur pengikatan asli yang tersedia untuk platform WPF tersedia di semua platform (termasuk WinForms).
sumber