Derzeit übergebe ich meine Domänenobjekte an meine Ansichten, und Bindung direkt an sie von POSTs. Jeder sagt, das ist schlecht, so dass ich versuche, in das ViewModel-Konzept hinzufügen.
Ich kann jedoch keinen Weg finden, dies sehr elegant zu tun, und ich würde gerne wissen, welche Lösungen andere Leute haben, um nicht mit einer sehr unordentlichen Controller-Aktion zu enden.
Der typische Prozess für die Funktion "Person hinzufügen" sieht folgendermaßen aus:
- eine GET-Anfrage für eine Ansicht stellen, die ein leeres Person-Ansichtsmodell darstellt
- (un)gültige Daten zurückschicken
- Controller bindet gebuchte Daten an ein Personen-Viewmodel
- Wenn die Bindung fehlschlägt, muss ich die gleiche Aktion wie in (1), aber mit einigen Daten, nicht ein leeres Objekt und Fehler zu tun
- Wenn die Bindung erfolgreich war, muss ich die Eigenschaften aus der VM auf ein reales Modell abbilden
- das Modell zu validieren
- bei bestandener Validierung: Speichern der Person, Übertragen, Zuordnen der Benutzerdetails zu einer Anzeige-VM und Rückgabe in einer Ansicht
- wenn die Validierung fehlgeschlagen ist, dieselben Aktionen wie in (1), aber mit einigen Daten und Fehlern
All dies in einer Controller-Aktion (ohne GET) zu tun, ist sicherlich nicht SRP oder DRY.
Ich versuche, einen Weg zu finden, diesen Prozess so aufzubrechen, dass er sich an SRP hält, sauber, modular und vor allem testbar ist.
Was sind die Lösungen für die Menschen?
Ich habe mit benutzerdefinierten Controller-Action-Invokateure experimentiert, um die Anliegen in einzelne Methoden, intelligente modelbinders und einfach nur rohe Gewalt zu trennen, aber ich habe noch über eine Lösung in glücklich mit kommen.
P.S. da es so viel Komplexität hinzufügt, überzeugen Sie mich, warum ich mich überhaupt bemühen muss