Azioni e controllanti che gestiscono la strategia nelle app MVC

0

Qualcuno può nominare una strategia / modello architetturale utile per allocare azioni tra diversi controllori quando si utilizza il pattern MVC per lo sviluppo di applicazioni Web?

Ora sto sviluppando un'app Web utilizzando il framework asp.net Mvc3 e ancora non riesco a capire come gestire azioni e controller. Un approccio consiste nel creare un singolo controller di azioni per ciascun url, ma non è la scelta migliore poiché molti controller devono essere creati. Devo elencare tutti gli URL disponibili supportati dalla mia app Web, dividerli in gruppi e creare controller separati per ciascun gruppo o agire in modo diverso?

Sembra che diventerò faccia a faccia con un qualche tipo di disordine senza un approccio coerente nella gestione delle azioni e dei controller.

    
posta singleton 29.08.2012 - 16:22
fonte

1 risposta

4

La cosa migliore da fare è iniziare con lo schema MVC predefinito, in cui i controller e le azioni sono "allocati" dalla convenzione URL, con la prima parte del percorso che determina il controller e il resto dell'URL ( e il tipo di richiesta, ad esempio GET o POST) che determina l'azione che verrà chiamata.

Anche se all'inizio sembra che debba portare a un "pasticcio" la realtà è che la maggior parte dei siti Web non richiede in realtà molti controller e, di certo, non richiede molte azioni.

A volte potresti voler fare qualcosa di intelligente per dividere un controller in due, mantenendo gli URL uguali - ad esempio potresti avere:

~/Products che va a ProductsController.GetProducts()

~/Products/{id} che va a ProductsController.GetProduct(id)

Ma allora, diciamo che hai recensioni anche di prodotti, potresti avere

~/Products/{id}/Reviews che va a ProductReviewsController.GetReviews(id)

Questo potrebbe essere legittimo poiché la funzionalità delle recensioni potrebbe richiedere un bel po 'di codice, che non è direttamente correlato ai prodotti stessi.

Detto questo, la motivazione per la suddivisione dei controllori non dovrebbe essere quella di mantenere un file di codice piccolo (lo si può fare con classi parziali), dovrebbe essere il rispetto di un principio di responsabilità singola; cioè - un controllore dovrebbe avere responsabilità per singola sezione del tuo sito. Il controller degli utenti non deve essere utilizzato anche per la tua home page.

Non genera un nuovo controller per tutto ciò che fai, lo consideri in base all'entità su cui il controllore opererà o fornirà dettagli (ad es. prodotti, utenti, ecc.). Pensare prima all'URL e poi usarlo come base per i nuovi controller è un ottimo punto di partenza, perché in definitiva si desidera che il tuo sito sia facilmente navigabile dai motori di ricerca e dagli utenti.

La bellezza di MVC, inoltre, è che con la separazione dei controllori dai modelli di percorso che attivano le loro azioni, è possibile modificare completamente la struttura dell'URL di tutto il codice esistente semplicemente cambiando il routing. Per questo motivo è particolarmente importante ricordare di utilizzare sempre UrlHelper per generare URL ad altre azioni e HtmlHelper ActionLink e RouteLink operazioni nelle viste per generare collegamenti incrociati; questi percorsi di onore, e quindi togli un sacco di dolore associato alla ristrutturazione di un sito web a livello di URL.

    
risposta data 29.08.2012 - 16:50
fonte

Leggi altre domande sui tag