Welches Muster soll mit einem typischen Webformular verwendet werden?


9

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.


Ist es eine Anwendung auf Unternehmensebene?
Yusubov

Antworten:


7

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.

MVVM ermöglicht eine klare Trennung der Entwicklung der grafischen Benutzeroberfläche (entweder als Auszeichnungssprache oder als GUI-Code) von der Entwicklung der Geschäftslogik oder Back-End-Logik, die als Modell (auch als Datenmodell bezeichnet) bekannt ist, um sie von der Ansicht zu unterscheiden Modell). Das Ansichtsmodell von MVVM ist ein Wertekonverter. Dies bedeutet, dass das Ansichtsmodell dafür verantwortlich ist, die Datenobjekte aus dem Modell so verfügbar zu machen, dass diese Objekte einfach verwaltet und verwendet werden können. In dieser Hinsicht ist das Ansichtsmodell mehr Modell als Ansicht und behandelt die meisten, wenn nicht die gesamte Anzeigelogik der Ansicht (obwohl die Abgrenzung zwischen den Funktionen, die von welcher Ebene ausgeführt werden, Gegenstand ständiger Diskussionen und Untersuchungen ist).


Ich habe über das ASP.NET Model View Presenter-Framework bei Codeplex gelesen. Ist MVVM für Web Forms über eine Implementierung verfügbar?
RPK

MVP und MVVM sind im Wesentlichen gleich. Der Wikipedia-Artikel erklärt dies auch: MVP ist das erste Derivat in dieser Kette von MVC. Martin Fowler wird die Veröffentlichung des Musters zugeschrieben und er befasst sich mit einigen der Herausforderungen, die ein Controller in einem ereignisgesteuerten Bereich haben kann. MVVM war eine Weiterentwicklung von dort, um die Datenbindung zwischen Ansicht und Ansichtsmodell zu nutzen.

Die meisten Anwendungen, die ich gesehen habe, verwenden nur das Repository-Muster. Was ist der Grund?
RPK

1
Das Repository-Muster ist etwas schneller zu implementieren und nicht so schwer wie MVP / MVVM. Die Ansicht trifft das Modell direkt, anstatt eine Zwischenebene zu haben. Im Vergleich zu MVP / MVVM ist die Implementierung mit weniger zu schreibendem Code schneller. OTOH, es wird spröder, weil es eng mit der Modell- / Datenzugriffsschicht verbunden ist. Das Repository-Muster würde möglicherweise unter den von Ihnen beschriebenen Umständen funktionieren. Wenn Ihr Projekt jedoch wächst, wünschen Sie sich die Zwischenschicht für Presenter / VM.



6

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.


1
Gegenwärtig ist mein Code-Behind eng mit der Logik verbunden. Und dies ist der größte Fehler, den Web Form-Entwickler häufig machen.
RPK

0

Ihre angegebene Anforderung ist jedoch sehr abstrakt:

Ich möchte den Code verbessern, indem ich jedes Entwurfsmuster implementiere, mit dem Abstraktion erreicht wird, und die Verwaltbarkeit und Verständlichkeit erhöht. ...

... 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.


-1

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.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.