Sto cercando di aderire alle migliori pratiche di progettazione multistrato e non voglio che il mio controller MVC interagisca con il mio DAL (o qualsiasi altro IRepository). Deve passare attraverso il mio livello di servizio aziendale per applicare regole e convalida aziendali corrette. Convalida - Non voglio eseguire la convalida nel controller usando i vari attributi di convalida (come [Required]) sulle entità del mio dominio perché questo fa luce sul mio front-end. Per non parlare di questo servizio può anche essere implementato attraverso un front-end WPF.Convalida MVC - Mantenerlo ASCIUTTO con un livello di servizio: qual è la migliore pratica?
Poiché la convalida viene eseguita nel mio livello di servizio, quali sono le migliori pratiche per restituire i valori all'interfaccia utente? Non voglio un 'addWhatever (int somethingsID) vuoto, perché ho bisogno di sapere se ha fallito. Dovrebbe essere un booleano? Dovrebbe essere un Enum? Dovrei approfittare della gestione delle eccezioni? O dovrei restituire qualche oggetto IValidationDictionary simile a quello usato da MVC quando adornano gli attributi di validazione sugli oggetti Model? (che potrei usare un modello di adattatore nell'interfaccia utente in un secondo momento, se necessario)
Vorrei passare la mia entità dal controller al livello di servizio e capire se la convalida/persistenza dati non è riuscita. Inoltre, non voglio perdere di vista il fatto che ho bisogno di restituire una vista che indichi i messaggi di errore corretti per ogni campo che può avere convalida fallita (vorrei mantenerlo il più indolore possibile).
Ho avuto diverse idee, tutte cose che non mi sembrano giuste. Sento che la risposta include entità modello View-specific, ma questo porta a un intero problema di mappatura che deve essere affrontato, per non parlare di ciò viola il principio DRY (Non ripeterlo). Qual è la migliore pratica?
Anche se questa è una domanda piuttosto vecchia, mi piacerebbe avere un piccolo chiarimento sull'argomento. Diciamo che devo convalidare che un 'username' non deve superare i 15 caratteri e dovrebbe essere unico. La restrizione di 15 caratteri sarebbe avvenuta nel controller e la verifica dell'unicità sarebbe avvenuta nel servizio? – Aquillo
@Aquillo - No, confermeresti entrambi in entrambe le posizioni. Questa risposta riguarda le visualizzazioni e la convalida in generale, non su elementi specifici. MVC convalida un "modello" non una proprietà, un modello è costituito da 0 o più proprietà che possono avere 0 o più convalide. MVC dice solo "Questo modello è valido". –