Ich habe vor ein paar Wochen ein WinForms-Projekt gestartet und da ich nicht wirklich wusste, welche Funktionen ich haben wollte, habe ich sie einfach hinzugefügt. Dies verursachte nun eine schreckliche Verwirrung, in der meine MainForm eine große Schlammkugel ist und wo zum Beispiel einige wichtige Zustandsänderungen durch UI-Elemente ausgelöst werden, bis ich das OnChange-Ereignis eines Controls aufrufen muss, um einen Zustand in der Datenbank zu ändern .Architektur für WinForms-Anwendungen?
Kurz gesagt: Ich habe gerade ein neues Projekt gestartet, bei dem ich einen besseren Ansatz verfolgen möchte. Ich weiß nur nicht, welcher der "gute" wäre. In ASP.net MVC fand ich das MVVM-Muster wirklich nützlich, aber auf dem Desktop scheint MVVM nur für WPF, nicht für WinForms gedacht.
Der andere Ansatz ist eine dreistufige Architektur: Ich habe meine Datenbank-Klasse, die derzeit direkt mit der Benutzeroberfläche kommuniziert. Ich erstelle jetzt eine neue statische Klasse ("ApplicationState"), die mit der Datenbank kommuniziert und Ereignisse auslöst, um der Benutzeroberfläche "Hey, Something changed!" Zu sagen. Die Benutzeroberfläche würde den Zustand manipulieren, der dann die Datenbankpersistenz behandelt und erneut Ereignisse auslöst, wenn die Benutzeroberfläche aktualisiert werden muss. Der Punkt hier ist, dass die ApplicationState-Klasse die Benutzeroberfläche nicht direkt ändert, sondern dass die Benutzeroberfläche Ereignisse abonniert. Das sieht wie eine saubere/"MVC-y" Art, es zu tun, aber vielleicht übersehe ich hier etwas?
Im Grunde mein ultimatives Ziel wäre, die Benutzeroberfläche vollständig unabhängig von der Datenbankschicht zu haben, nur um sicherzustellen, dass ich die Geschäftslogik nicht erneut in die Benutzeroberfläche einbinde.
Dieser Artikel Serie ist wirklich gut, scheint, was ich will. –
+1 für den Verweis auf die Serie auf MVP in WinForms. – groverboy