Ich schreibe eine einfache ASP.NET Web Forms-Anwendung. Ich möchte den Code verbessern, indem ich jedes Entwurfsmuster implementiere, mit dem Abstraktion erreicht wird, und die Verwaltbarkeit und Verständlichkeit erhöht.
Welches Muster wird empfohlen? Bitte geben Sie auch Links zu Beispielanwendungen an.
Antworten:
Sie können das Modell-Ansicht-Ansicht-Modell- MVVM-Muster verwenden . Es ist eine Ableitung von MVC, wurde jedoch entwickelt, um genau in der von Ihnen beschriebenen Situation verwendet zu werden. Auf der MSDN-Website finden Sie eine Fülle von Informationen, wenn Sie keine Lust haben, sie zu googeln.
quelle
In ASP.NET Web Form verwenden Sie normalerweise das Model View Presenter-Muster .
GlenH7 erwähnte in seiner Antwort MVVM; Obwohl es sich um ein elegantes Muster handelt, bietet ASPX Webform dafür keine großartige Unterstützung. MVVM ist in der WPF-Welt beliebter.
quelle
Kurze Antwort : Sehen Sie sich das MVP-Muster an , das potenzielle Probleme mit ASP.NET-Formularen vermeidet, indem Sie Ihre Ansicht und Logik lose koppeln (entkoppeln).
Vielleicht möchten Sie auch noch einen Schritt weiter gehen und sich diesen Vergleich ansehen: MVC, MVP, ASP.NET .
Die folgenden Beiträge sind gute Einstiegspunkte und Beispiele:
quelle
Das einzige, was Sie unbedingt vermeiden müssen, ist das Anti-Muster von WebForms, Logik in Ihren Code-Behind einzufügen. Unabhängig davon, ob Sie MVP verwenden oder eine Variante davon oder nicht, sollten Ihre CodeBehind-Dateien aus Gründen Ihrer geistigen Gesundheit sehr spärlich sein.
quelle
Ihre angegebene Anforderung ist jedoch sehr abstrakt:
... und zu diesem Zweck scheinen Sie "Design Patterns" als eine Art Rezept zu betrachten. Sie zitieren sogar "Abstraktion" als Voraussetzung.
Der bereits vorhandene Code in einer bereits vorhandenen Anwendung profitiert normalerweise nicht von Versuchen, ihn zu "verbessern". Sie müssen Ihre Bemühungen vollständig begründen - nicht in Abstraktionen wie "Entwurfsmustern" - sondern in der Anwendung selbst, genau so, wie sie jetzt ist.
Über viele Jahrzehnte habe ich mir mehr als fünfzig verschiedene Anwendungen angesehen, die in Betrieb waren oder noch in Betrieb sind, und ich kann die "Silberkugeln" von gestern sehen, wie sie kamen und gingen, wobei jede eine "neue" Art und Weise auferlegte, Dinge zu tun, die dies tun nie wirklich etwas ersetzt. Beide Methoden sind noch vorhanden. "Verwaltbarkeit und Verständlichkeit" wäre auf lange Sicht erheblich verbessert worden, wenn diese oder jene "Silberkugel" überhaupt nicht versucht worden wäre.
Meiner Ansicht nach besteht das gesamte Konzept der "Entwurfsmuster" darin, nützliche Gespräche zu entfachen und mögliche Alternativen vorzuschlagen. Aber sie sind keine Rezepte.
quelle
MVVM ist in. NET 4.5 mit Modellbindung und der Verwendung von gebundenen Steuerelementen mit Vorlagen wie FormView möglich.
Hier ist die Technik, die ich benutze:
Ich entwerfe ViewModels für jedes UserControl und jedes verschachtelte UserControl und verwende dann eine FormView, die sich immer im EditMode befindet, wobei ich die Steuerelemente einbinde, die mithilfe von Bindungsausdrücken an Modelleigenschaften gebunden werden.
Ich habe die SelectMethod und UpdateMethod der FormView festgelegt. Das erste gibt das ViewModel zurück und das zweite ruft TryUpdate () auf. Bei Postbacks rufe ich die Update-Methode von FormView immer in Preload oder Load auf. Auf diese Weise ist das ViewModel in der Ansicht immer auf dem neuesten Stand.
Ich führe die Logik im ViewModel aus und binde in PreRender die Ansicht neu, um alle Änderungen zu übernehmen. Der Schlüssel bei dieser Methode besteht darin, das ViewModel in die Ansicht (UserControl) außerhalb der Ansicht (z. B. auf Seitenebene) einzufügen und natürlich sicherzustellen, dass es in ViewState oder an einem anderen von mir ausgewählten Ort serialisierbar und zwischengespeichert ist.
Schließlich deaktiviere ich den ViewState in allen Steuerelementen, da sie letztendlich vom zwischengespeicherten Stateful ViewModel "gesteuert" werden und keinen eigenen Status benötigen.
Diese Technik hat mich bisher nie enttäuscht und ich wünschte nur, ich könnte auch eine Lösung für die Befehls- / Tastenbindung finden, wie WPF.
quelle