MVVM jest najczęściej używany z WPF, ponieważ doskonale się do niego nadaje. Ale co z Windows Forms? Czy istnieje ustalony i powszechnie używany wzorzec podejścia / projektowania, taki jak ten dla Windows Forms? Taki, który działa wyraźnie dobrze z Windows Forms? Czy jest książka lub artykuł, który dobrze to opisuje? Może oparty na MVP lub MVC?
winforms
design-patterns
bitbonk
źródło
źródło
Odpowiedzi:
Wypróbowałem MVP i wydaje się, że działa świetnie również z formularzami Windows. Ta książka zawiera przykład formularzy okienkowych ze wzorem MVP (przykładowa aplikacja płacowa). Aplikacja nie jest tak skomplikowana, ale daje wyobrażenie o tym, jak ją stworzyć.
Zwinne zasady, wzorce i praktyki w języku C # ...
Możesz pobrać kod źródłowy w Kod źródłowy
EDYTOWAĆ:
Istnieją dwie odmiany wzorca MVP (a) Widok pasywny i (b) Kontroler nadzorujący
W przypadku złożonych scenariuszy wiązania danych wolę używać wzorca kontrolera nadzorującego. W nadzorowaniu wzorca kontrolera odpowiedzialność za wiązanie danych spoczywa na widoku. Tak więc w przypadku treeview / datagrid powinno to znajdować się w odpowiednich widokach, tylko logika agnostyczna widoku powinna zostać przeniesiona do prezentera.
Polecam przyjrzenie się poniższej strukturze MVP MVC # - Framework MVP
Nie używaj nazwy (to framework MVP).
Prosty plik wideo WinForm MVP Winforms - MVP
Przykład radzenia sobie z rozwijaną listą MVP - DropDownList
Prosty przykład wiązania drzewa (wiązanie dla biednych). Możesz dodać dowolną logikę specyficzną dla drzewa w BindTree ().
Poniżej znajduje się fragment kodu… nie przetestowany, wpisany bezpośrednio z myśli…
źródło
Jak już powiedziałem, zawsze pracowałem według wzorca MVP podczas korzystania z Winforms. Ale wzorzec projektowy, którego użyjesz, nie oznacza, że użyjesz dobrze. Jest mnóstwo anty-wzoru dołączonego do MVP.
Jeśli chcesz rozpocząć wszystko w dobry sposób, musisz użyć frameworka do zbudowania inteligentnego klienta. Dlatego zalecę korzystanie z tego projektu i praktyk: Smart Client Software Factory http://www.codeplex.com/smartclient
Masz tutaj dyskusję na temat obecnych struktur klienta inteligentnego: http://codebetter.com/blogs/glenn.block/archive/2008/05/10/prism-cab-and-winforms-futures.aspx
PS: Podoba mi się ten post o anty-wzorcach MVP: http://blog.mattwynne.net/2007/06/13/mvp-smells/
Mam nadzieję że to pomoże
źródło
Model-View-ViewModel (MVVM) Wzór jest wzorzec projektowy. Z definicji wzorzec projektowy przedstawia typowe rozwiązanie w świecie zorientowanym obiektowo i to rozwiązanie może być stosowane na różnych platformach (WPF, WinForms, Java Swing itp.). Zgadzam się, że MVVM jest najlepiej używany z WPF, ponieważ wykorzystuje silne możliwości wiązania. Jednak Windows Forms obsługuje również powiązanie danych.
WAF Windows Forms Adapter pokazuje, jak zastosować Wzorzec MVVM w aplikacji Windows Forms.
źródło
Pisałem o odmianie wzorców projektowych MVP / MVVM zwanych MVP-VM, które jest dostosowanym rozwiązaniem dla aplikacji winForm, które wymagają pełnego zakresu testowania i używają wiązania danych jako głównego mechanizmu aktualizowania prezentacji danymi modelu.
MVVM dla .NET Winforms
źródło
Zadałem to samo pytanie dwóm moim współpracownikom technicznym: czy MVVM dla WindowsForms jest możliwy? Oba dały mi dokładnie taką samą odpowiedź: „ Nie ma mowy! W WindowsForms brakuje bogatych powiązań WPF i Silverlight (OneTime, OneWay, TwoWay, OnewayToSource), a także brakuje TypeConverters ”.
Czy możemy mieć MVVM dla WinForms? Tak możemy. Mamy wszystkie części. Musimy je tylko skleić.
źródło
Uważam, że MVP jest wzorcem dobrze dopasowanym do rozwoju WinForm - o czym częściowo świadczy jego użycie w CAB - frameworku Microsoft dla WinForms.
Używam MVP w WinForms, aby wyodrębnić kod z widoku - ponieważ nie mogę przetestować kodu widoku. A także, aby włączyć kod, który musi zostać ponownie użyty (lub jest zduplikowany), aby pozostać poza widokiem, w którym nie można go udostępnić.
Mogę odwołać się do własnego projektu, w którym używam wzorca MVP ExceptionReporter.NET . Chociaż jestem pewien, że nie używam go idealnie.
Wspomniałeś o MVVM pracującym dla WPF - myślę, że powodem tego jest silna obsługa powiązań danych. Jeśli nie korzystałeś z wiązania danych w WPF (i na pewno nie jest to obowiązkowe), możesz wybrać MVP. Chodzi o to, że MVP jest dobrym wyborem dla każdej aplikacji po stronie klienta. I prawdopodobnie „lepszy” wybór, nawet w WPF, jeśli planujesz udostępniać kod między projektami, które nie są WPF.
Aby uzyskać więcej dowodów na wartość korzystania z MVP w WinForms, zobacz prezentację wideo Boodhoo na temat korzystania z MVP: http://www.bestechvideos.com/2008/06/29/dnrtv-show-14-jean-paul-boodhoo-on-model -view-presenter Oraz artykuł w MSDN tego samego autora pod adresem http://msdn.microsoft.com/en-us/magazine/cc188690.aspx
źródło
Te projekty nie polegają na ukrywaniu modelu, a raczej na precyzyjnym definiowaniu interakcji między różnymi warstwami aplikacji. Możesz całkowicie zmienić backend i tak długo, jak przekażesz Model przez Bindtree, Twój interfejs użytkownika będzie nadal działał.
Teraz klasa Model może być kiepskim wyborem nazwy w przykładzie, który podaje Rajesh. Może to być TreeData lub RecordsData. Jakkolwiek to zdefiniujesz, ma to, czego potrzebujesz, aby użyć mechanizmu wiązania Winforms do powiązania określonej kontrolki z danymi źródłowymi.
Najlepsza witryna do przeglądania tego rodzaju materiałów jest tutaj . Martin Fowler zebrał wiele przydatnych wzorców projektowania interfejsu użytkownika i wzorców projektowych dla przedsiębiorstw.
Ponownie, kluczem do tego jest użycie interfejsów do precyzyjnego zdefiniowania interakcji poszczególnych warstw.
W mojej aplikacji (aplikacja CAD / CAM do obsługi maszyn do cięcia metalu) moja konstrukcja wygląda tak.
źródło
Możesz użyć Architektury Korporacyjnej, wzorców i praktyk jako punktu wyjścia, chociaż są one nieco przestarzałe.
W rozdziale „Ogólne wskazówki” znajduje się Architektura aplikacji dla .NET: Projektowanie aplikacji i usług , która jest dobrym wprowadzeniem do sposobów .NET i warstwowej aplikacji N-warstwowej.
tekst alternatywny http://i.msdn.microsoft.com/ms954595.f00aa01%28en-us%2CMSDN.10%29.gif
Bardziej formalne „wzorce” można znaleźć w artykule Wzorce rozwiązań korporacyjnych wykorzystujące Microsoft .NET . (źródło: microsoft.com )
Aby wymienić tylko kilka,
źródło
Pierwsze dobre wyjaśnienie wzorców projektowania interfejsu użytkownika, które przeczytałem, znalazło się na blogu Jeremy'ego Millera - Building Your Own CAB . Opisuje typowe wzorce - pasywny widok, MVP itp. I opisuje niektóre sposoby ich implementacji w języku C #.
źródło
Możesz wypróbować MugenMvvmToolkit, który pozwala na użycie „czystego MVVM” dla WinForms. Ze względu na to, że obsługuje powiązania na wszystkich platformach, wszystkie natywne funkcje powiązań dostępne dla platformy WPF są dostępne na wszystkich platformach (w tym WinForms).
źródło