2014-11-04 11 views
6

Durante la lettura di "The Definitive Guide To Grails", sono un po 'confuso su Command Objects. Sembrano essere un involucro intorno alle classi di dominio per aiutare con la convalida, ma questa è già disponibile nelle classi di dominio tramite vincoli incorporati e ulteriormente tramite validatori personalizzati, quindi cosa fa realmente un oggetto comando e cosa ci motiva a averne bisogno?Oggetti di comando Grails - Qual è la motivazione dietro di loro?

Il libro inizia la discussione su oggetti comando affermando che

"A volte una particolare azione non richiede l'intervento di una classe dominio, ma richiede ancora la validazione dell'input dell'utente."

Tuttavia, viene quindi dimostrata la dichiarazione e l'utilizzo di un oggetto comando relativo a una classe di dominio Album. Quindi, sembra che qualsiasi oggetto comando sia ancora strettamente correlato alle classi di dominio. Sono sicuro che la mia confusione sia completamente il risultato della mia mancanza di comprensione e quindi desidero chiedere chiarimenti. Grazie.

+2

Ciò può aiutarti a comprenderli meglio: http://stackoverflow.com/questions/25803628/grails-the-use-of-service-layer/25804208#25804208 –

risposta

7

Essi sembrano essere un wrapper per classi di dominio ...

È possibile utilizzare gli oggetti di comando in quel modo, ma che non è il loro uso primario.

Gli oggetti di comando sono utili quando si desidera incapsulare un gruppo di parametri di richiesta e fare qualcosa insieme. Quel qualcosa potrebbe o potrebbe non avere nulla a che fare con le classi di dominio.

Ad esempio, è possibile disporre di un'app Grails che non ha alcuna classe di dominio e gli oggetti di comando potrebbero comunque essere davvero utili. Immagina un'app Grails che è solo un livello di servizio che riceve richieste da moduli Web o richieste REST con un corpo JSON o qualsiasi altra cosa e l'app Grails sta per ricevere quelle richieste, convalidare gli input, magari fare qualche matematica o altro e poi effettuare una chiamata REST ad altri processi di back-end che potrebbero memorizzarli in un database o generare report o altro. In una situazione del genere, ci sono molti motivi per cui si potrebbe voler utilizzare gli oggetti comando anche se non sono coinvolte classi di domini.

Non ci si impegna a pensare che gli oggetti comando devono essere legati alle classi di dominio. A volte lo sono, ma non limitarti a pensare a loro in quel contesto. Usa gli oggetti comando quando vuoi collegare un gruppo di parametri di richiesta insieme e fai qualcosa con loro.

3

Tendo ad utilizzare oggetti comando che corrispondono a ciò che accade nel livello dell'interfaccia utente, i moduli di invio possono essere convalidati con oggetti comando e quindi passati in servizi che eseguono il lavoro di persistenza. Molte volte ha senso avere il tuo modello di dominio diverso dal flusso dell'interfaccia utente con cui stai lavorando.

Il mio livello di dominio può anche avere vincoli più lenti di alcuni degli oggetti comando se voglio richiedere che determinati flussi forniscano informazioni sufficienti.

Problemi correlati