2009-12-12 14 views
5

Dove è il posto migliore per convalidare i dati che verranno utilizzati dal modello. Ad esempio, pensa al modulo di registrazione. Abbiamo alcuni dati che provengono dal modulo di registrazione. Quindi dov'è il posto migliore per verificare questi dati. Dovremmo controllare tutti i dati in base a istruzioni o classi di validatori speciali, e questo significa molto codice, quindi voglio sapere dov'è il posto dove farlo.Livello di convalida in pattern MVC

Nel controller? o modello?

Entrambi? Perché alcuni dati devono essere convalidati da altri modelli?

Se non si è certi della risposta esatta, si prega di provare a individuare possibili vantaggi e svantaggi in entrambi i modi.

risposta

2

Certamente non nel controller, il suo unico compito dovrebbe essere solo il controllo della richiesta/risposta e il modello familarize e la visualizzazione l'uno con l'altro. Fallo nel modello di business. Non con una serie di istruzioni if, ma semplicemente usando un ciclo for e un framework di convalida astratto.

La convalida nella visualizzazione deve essere eseguita solo per migliorare l'esperienza dell'utente. In webapps la vista è fondamentalmente la pagina HTML. In tale convalida è possibile solo con Javascript che funziona interamente sul lato client. Il client ha il pieno controllo su di esso, come l'hacking/disabilitarlo. Utilizza la convalida JS solo per per migliorare l'esperienza utente (ad esempio, una risposta più rapida, nessun flash di contenuto). Ancora fare la (stessa) validazione sul lato server per una migliore robustezza.

+0

Ma alcuni dati devono essere convalidati da altri modelli? Ad esempio, prima di aggiungere una riga di video preferita, dovremmo controllare l'esistenza del video. –

+0

Fatelo anche nel modello di business. Nota, modello di business, non modello di dati. – BalusC

+0

Scusate, penso di non avere molta familiarità con questi termini e le loro definizioni. Potete fornire qualsiasi fonte che possa apprenderli –

7

L'origine dei dati di convalida deve essere nel modello, mentre il controllo effettivo dovrebbe probabilmente essere eseguito sia a livello di vista (magari con suggerimenti javascript o UI) sia a livello di modello. I puristi suggeriranno che il punto di vista non dovrebbe essere coinvolto, ma non sono d'accordo.

+1

I puristi hanno ragione, ma i puristi hanno anche imparato il loro mestiere nella programmazione delle applicazioni desktop. Sul Web, facendolo nella vista, il modello ha il vantaggio di salvare una richiesta HTTP di andata e ritorno. È facile cedere a questo approccio se hai il lusso di un'app desktop in cui tutto è sulla stessa macchina, occupando spesso lo stesso spazio di memoria. Quindi probabilmente hai ragione. Fatelo in entrambi. – RibaldEddie

+0

Non farei la convalida ** solo ** con Javascript in quanto può essere compromesso/falsificato/disabilitato. Usalo solo discretamente per migliorare l'esperienza dell'utente (cioè senza cicli di richiesta-risposta o flash di contenuto). – BalusC

+0

Sono d'accordo. I dati devono essere passati al modello (in questo caso l'array $ _POST) e convalidati lì. Sono d'accordo anche sul js nella vista. – AntonioCS

1

Inserire la convalida nei modelli impedisce di dover ripetere il codice di convalida in un gruppo di controller.

1

la convalida deve essere eseguita sia nel modello che nella visualizzazione secondo me.