Questa è una domanda viziata con molte risposte ma nessuna aveva la risposta che mi sarei aspettato di essere elencato.
La risposta breve è:
- Utilizzare ASP.NET MVC se si intende creare correttamente un'applicazione Web con convenzioni di programmazione moderne e schemi di utilizzo industriale per la piattaforma ASP.NET. Sul lato negativo ci si aspetta che tu sappia come funzionano le risorse HTML e lato client (Javascript, CSS), oltre ad accelerare la mentalità di programmazione MVC che ha una ripida curva di apprendimento ma raggiunge una fine improvvisa una volta afferrata.
- Utilizzare i moduli Web ASP.NET se si sta utilizzando o si desidera utilizzare un approccio basato su GUI , RAD (Rapid Application Development) , drag-and-drop per la prototipazione di qualcosa molto rapidamente, ovvero il comportamento della griglia di dati / pulsante cablato all'interno di 15 minuti e la soluzione non intende essere qualcosa di supportato dagli sviluppatori. In alternativa, utilizzare i moduli Web ASP.NET se si dispone di un background nello sviluppo della GUI o di Windows Form e si desidera trasferire le proprie conoscenze sul Web.
Ma per vederlo correttamente, devi capire la storia di ciascuno.
ASP.NET Web Forms è stata la risposta di Microsoft a coloro che avevano sviluppato applicazioni Web dinamiche utilizzando i controlli ActiveX di Visual Basic 6, le DLL VB6 sul server e ASP Classic. All'epoca, lo sviluppo web con questi strumenti Microsoft era un vero casino. Insieme all'intero .NET Framework che è stato l'output di Microsoft, essenzialmente tornando al tavolo da disegno su come eseguire una programmazione aziendale produttiva sullo stack di Windows, ASP.NET Web Forms era, a suo tempo, sorprendente e bello.
L'intero approccio è stato quello di offrire agli sviluppatori il meglio di entrambi i mondi di qualcosa di molto simile allo sviluppo di applicazioni Windows, ma con la potenza dei servizi Internet. L'idea era che, proprio come con un "Modulo" VB6 / WinForms (una finestra), anche una pagina Web è un modulo (proprio come una finestra, vedi) , e su quel modulo è possibile trascinare e rilasciare etichette, caselle di testo, griglie di dati, pulsanti e altre cose a cui gli sviluppatori della GUI di VB / WinForms erano abituati.
Per fare in modo che un pulsante faccia qualcosa, dopo averlo trascinato, fai doppio clic su di esso nel designer e fai esplodere nell'editor di codice, dicendo al modulo cosa fare quando si verifica quell'evento "clic". Questo è esattamente il modo in cui gli sviluppatori della GUI di Windows hanno creato software utilizzando gli strumenti della GUI di VB6 e strumenti concorrenti, tranne ora che il codice è in esecuzione sul server! Wow!
Questa era la tecnologia del 2002. Incredibile e bello ai suoi tempi come risposta a soluzioni GUI abilitate a Internet per lo sviluppo di RAD , ha portato un senso di potenza in un mondo disordinato di sviluppatori software che avevano obiettivi aziendali che dovevano raggiungere.
Sfortunatamente, questo modello di programmazione enfatizza così tanto la metafora della programmazione della GUI di Windows che porta con sé l'onere dei suoi dettagli di implementazione necessari, tutto il bagaglio ingombrante necessario per ospitare i cicli di vita degli eventi e nascondere i brutti dettagli del semplice HTML e script generato da questi componenti e controlli con trascinamento della selezione. E alla fine della giornata, gli sviluppatori che supportano applicazioni reali dovevano inevitabilmente scavare in profondità in questi componenti o scrivere i propri, e di conseguenza avrebbero combattuto battaglie con questa infrastruttura, battaglie che avrebbero lasciato dietro pile su pile di motoscafo, capelli strappati e lacrime.
Eseguire il backup. Lavati le mani. Esaminiamo di nuovo il problema aziendale. Quali sono i nostri obiettivi aziendali?
Dobbiamo creare e gestire applicazioni Web . I nostri vincoli sono che abbiamo il World Wide Web, che si trova su HTTP, HTML, Javascript e CSS, e sul server abbiamo regole di business, database e una manciata di grandi linguaggi di programmazione (ad esempio C #). Abbiamo davvero bisogno di questa metafora della GUI di Windows per guidare la nostra metodologia di sviluppo? Perché non possiamo concentrarci solo sui problemi dell'applicazione e eliminare le metafore della GUI?
È qui che entra in gioco ASP.NET MVC. È iniziato da una ribellione di sviluppatori che si chiamavano "Alt.Net" e che volevano tornare ai principi di sviluppo software corretti e puri. Niente più confusione, concentrati solo sugli obiettivi aziendali e sulle migliori pratiche software.
Ciò che questo si traduce in questo caso è:
- Separazione delle preoccupazioni . Ad esempio, un componente di dati non ha bisogno di sapere come verranno resi i suoi dati, né dovrebbe visualizzare il markup gravato con i dettagli di configurazione della connessione al database e in questo modo uno sviluppatore può concentrarsi sulla sua area di interesse durante la modifica e codice di prova.
- Esposizione e pieno supporto per l'esposizione alla nitidezza di HTML e risorse correlate . In Web Forms, l'HTML è nascosto, gli sviluppatori sono scoraggiati dal preoccuparsi di ciò. In ASP.NET MVC, gli sviluppatori sono piuttosto incoraggiati a gestire questi dettagli; in effetti è una necessità. Il vantaggio qui è che lo sviluppatore può imparare nuovamente ad apprezzare la semantica pulita di HTML, CSS e script e lavorare con esso piuttosto che contro di esso.
- Testabilità di oggetti business . I controller e i modelli sono molto più adatti per i test delle unità programmatiche, in modo che le implementazioni possano essere convalidate per raggiungere gli obiettivi aziendali e che le modifiche possano essere verificate e che non si interrompano. Con i Web Form era difficile testare poiché i componenti non erano progettati per essere testati individualmente e l'intero output di sviluppo ruotava attorno ai moduli di pagina e ai loro cicli di vita degli eventi con la confusione della logica aziendale e della logica di presentazione profondamente intrecciate.
Si noti che HTML è già un linguaggio di markup di altissimo livello, così come Javascript è un linguaggio di programmazione di alto livello. L'intera storia sarebbe stata diversa se avessimo a che fare con il linguaggio dell'Assemblea e C.
Espandendo su # 2, quindi, un altro obiettivo di ASP.NET MVC è quello di consentire agli sviluppatori di organizzare i dettagli front-end della parte 'view' delle loro soluzioni e sfruttare la ricca base su cui il resto del settore ha costruito la piattaforma client front-end.
Scoprirai che gli sviluppatori ASP.NET MVC si sentono a casa utilizzando ricche librerie Javascript e tecniche di templazione lato client senza combattere con l'architettura lato server. Questo non era originariamente il caso dei moduli Web ASP.NET, poiché i moduli Web non vogliono che tu guardi l'HTML o lo script, tranne se devi davvero , nel qual caso, fai attenzione, non è per i deboli del cuore.