Attualmente sto passando i miei oggetti di dominio alle mie viste e lego direttamente a loro da POST. Tutti dicono che questo è male, quindi sto tentando di aggiungere il concetto di ViewModel.utilizzando ViewModels per le azioni POST in MVC elegantemente
Tuttavia, non riesco a trovare un modo per farlo in modo molto elegante, e mi piacerebbe sapere quali sono le soluzioni di altre persone per non finire con un'azione di controller molto caotica.
il tipico processo per dire alcune funzionalità "Aggiungi persona" si presenta così:
- fare una richiesta GET per una vista che rappresenta un ViewModel persona vuota
- palo (in) i dati validi
- controller rilegge dati registrati su una persona viewmodel
- se l'associazione fallisce, ho bisogno di fare la stessa azione come in (1) ma con alcuni dati, non un oggetto vuoto ed errori
- se l'associazione ha superato, i bisogno di mappare le proprietà dal VM su un modello reale
- validare il modello
- se la convalida superato: salvare la persona, si impegnano, mappare i dettagli degli utenti ad un display VM e restituirlo in una vista
- se la convalida fallito, esegui le stesse azioni di (1) ma con alcuni dati ed errori
Fare tutto questo in un'azione del controller (ignorando il GET) non è certamente SRP o DRY.
Sto cercando di pensare a un modo per rompere questo processo in modo che rispetti SRP, sia pulito, modulare e soprattutto verificabile.
Quali sono le soluzioni per i popoli?
Ho sperimentato con i selettori di azioni personalizzate del controller per separare le preoccupazioni in singoli metodi, smart modelbinders e semplicemente brute force ma non ho ancora trovato una soluzione soddisfacente.
P.S. come aggiunge tanta complessità, convincimi perché ho anche bisogno di infastidire
Che cosa si finisce per fare? –
ancora niente :(sto ancora cercando di decidere su una soluzione elegante in modo che i miei controller non finiscano davvero disordinati Penso che la vera risposta sia openrasta –
Forse questi post possono aiutare un po ': http://stackoverflow.com/a/25460769/3969501, http://stackoverflow.com/a/25169023/1475331 –