Ich habe eine Registrierungsseite in meiner Bewerbung. Es hat 3 Zustände und 1 Fehlerzustand (wenn irgendein Fehler kommt):
Ich möchte hier das Zustandsmuster verwenden. Zuerst habe ich eine Konsolenanwendung erstellt, die in Ordnung ist. Jetzt möchte ich diese Logik in meiner MVC-Anwendung implementieren, aber ich bin verwirrt über die Struktur. Ich meine, wie viele Ansichten, Modelle und Controller ich brauche und wo ich meine Logik platzieren soll.
1 Controller : RegistrationController
6 Aktionsmethoden :
Dies ist ein grober Code, um Ihre Gedanken in die Tat umzusetzen:
%Vor%Wie Sie sehen können, müssen Sie immer noch einen MVC-Code schreiben, um auf Zustandsänderungen reagieren zu können. In meinem Beispiel wird alles in Aktionsmethoden ausgeführt. Aber auch Aktionsfilter könnten verwendet werden. Wenn Sie keinen allgemeinen Aktionsfilter finden, der viele verschiedene Statusobjekte bereitstellen kann, schreiben Sie den Code am besten in Aktionsmethoden.
Wenn Sie Asp.net MVC gut genug kennen, können Sie einen Schritt weiter gehen und eine State Machine ControllerFactory schreiben, die zusammen mit dem Routing in einem Sinn wie folgt funktionieren würde:
%Vor%ControllerFactory würde daher in der Lage sein, Ansichtsdaten zu einem bekannten Statusobjekttyp zu analysieren und die Ausführung an eine bestimmte Aktion zu übergeben. Laut Staat. Dies würde es zu einem speziell State Machine Asp.net MVC-Anwendung geeignet machen.
Die wichtigere Frage ist natürlich, ob Sie die gesamte Anwendung mit diesem Muster erstellen können oder ob nur bestimmte Teile davon so funktionieren sollten. Sie könnten natürlich beide Ansätze kombinieren und für jeden das passende Routing bereitstellen.
Sie sollten sehr vorsichtig sein, wie Sie Ihren Fehlerzustand definieren, weil die Eingabe ungültiger Felddaten nicht zu einem Fehler führen sollte, sondern zu Datenüberprüfungsfehlern, die in der Ansicht neben dem Feld mit ungültigen Daten angezeigt werden bereitgestellt als 13/13/1313). Ihr Fehlerstatus sollte nur für tatsächliche Objektstatusfehler verwendet werden, die nicht mit Benutzereingaben zusammenhängen. Was wäre das, ist jenseits meiner Vorstellungskraft.
Wie in meinem Kommentar erwähnt, sollten Sie sich einige Asp.net MVC Intro Videos ansehen und Sie werden sehen, wie die Validierung in Asp.net MVC funktioniert. Auch ziemlich einfaches Zeug.
Ein solches Zustandsmuster ist nicht das, was ein regulärer Asp.net MVC-Entwickler verwenden würde, weil es den Code wahrscheinlich komplizierter machen würde als den normalen -Ansatz. Analysieren Sie, bevor Sie sich entscheiden. Asp.net MVC ist sehr sauber Code, so dass zusätzliche Abstraktion über es möglicherweise verwirrend werden. Und Ihr Domänenmodell (Zustandsklassen) hätte höchstwahrscheinlich einen viel komplexeren Code als einfache POCOs mit Datenanmerkungen.
In Ihrem Fall wäre die Datenvalidierung auch komplizierter (wenn sie mit Datenannotationen verwendet wird), weil Ihr Objekt entsprechend seinem Status validiert werden sollte, der zwischen den Zuständen unterschiedlich sein kann. POCO-Objekte werden immer gleich validiert. Dies kann bedeuten, dass wir mehr Klassen verwenden können, aber sie sind kleiner, einfacher und einfacher zu warten.
Ich denke, du verwirrst Staaten. Beispiele für den Zustand sind:
Nun würde jeder dieser Zustände eine Seite haben:
Wenn der Benutzer sich nicht registrieren kann, weil einige Felder leer geblieben sind, befinden sie sich im ersten Status und Sie müssen einige Validierungsnachrichten anzeigen.
Aus diesem Grund werde ich als Minimum einen Controller namens Register und die folgenden Aktionsmethoden haben:
Tags und Links asp.net-mvc asp.net-mvc-3 c# design-patterns