Dovrei usare sia AngularJS che ASP.NET MVC?


58

Ho iniziato a studiare AngularJS e ASP.NET MVC, ma non sono sicuro del perché utilizzarli entrambi insieme nello stesso progetto?

Non sono entrambi framework MVC? Devo usarli entrambi nella stessa applicazione? Non è l'uno o l'altro?

Risposte:


74

Se stai creando un'applicazione a pagina singola (SPA) , probabilmente non hai bisogno di "MVC" in ASP.NET MVC . Le viste, in particolare le viste dinamiche, sono probabilmente fornite / manipolate dal lato client. Maniglie angolari che vanno bene.

Ma forse non vuoi una SPA al 100%. E allora? Immagina invece 10 pagine, ma 10 pagine che sono moltodinamico. Dopo che un utente accede, c'è un piccolo badge utente nell'angolo destro. Non è dinamico. Mostra solo alcune cose eleganti come il "punteggio" dell'utente e il suo ultimo selfie. Metti in cache le cose eleganti in modo che possano essere facilmente recuperate. Ora, puoi andare in due modi con questo. Se sei un purista MVC sul lato client, recupera semplicemente i dati del badge dopo la consegna del payload HTML iniziale, proprio come tutti gli altri dati. Ma forse non sei un purista. Forse sei l'opposto di un purista. Forse sei un impurista. Pertanto, invece di fornire l'HTML iniziale, fornire alcuni JavaScript che verranno postati sul tuo server, pubblicarli tramite JavaScript per acquisire i dati del badge e infine fonderli in una vista tramite MVC sul lato client,quello come HTML iniziale. Dopo la consegna del codice HTML iniziale, si procede con le tipiche buffonate MVC sul lato client.

Quindi ... MVC sul server e sul client è solo un modo conveniente per organizzare il codice che era un casino nel 2001. Non devi scegliere l'uno o l'altro. Puoi scegliere entrambi. Concesso, più fai dopo la consegna dell'HTML iniziale, meno hai bisogno di MVC lato server. Tuttavia, è lì per te se ne hai bisogno. Ad esempio, ho lavorato su un'applicazione ASP.NET MVC / Angular in cui i template angolari esterni potrebbero effettivamente essere .NET MVC ActionResult. Ciò significa che il controller del server potrebbe unire i dati nella sua vista, inviarli ad Angular come modello e il controller di Angular potrebbe quindi unire i suoi dati nella vista. Non sto dicendo che questa è una buona idea, ma mostra solo che una forma di MVC non rende obsoleta l'altra.

Inoltre, indipendentemente da come distribuisci Angular, avrai bisogno di un modo per fornire quel codice HTML iniziale, i modelli e, soprattutto, i dati. Perché non utilizzare una piattaforma che lo rende facile? Ce ne sono molti, ma .NET MVC non è sciatto. Come ho detto, puoi rendere l'HTML iniziale e i modelli angolari esterni il risultato di un'azione MVC, ma meglio ancora, puoi utilizzare l' API Web .NET per fornire i dati. L'API Web è deliziosa come la composta di albicocche.

Riassumendo: MVC è solo uno schema. Potresti voler usare quel modello su qualsiasi numero di livelli fisici. Non può essere utilizzato. Usalo liberamente se ha senso. Inoltre, Angular potrebbe non essere comunque MVC (così dicono le persone che si preoccupano di queste cose), quindi sentiti libero di usarlo con uno strumento che ha "MVC" nel nome. Inferno, anche se è MVC, mescola e abbina come desideri.


3
Risposta incredibile. Grazie mille per la tua spiegazione +1
Natalie il

Puoi dirmi, ad esempio, se c'è un'API Web che mi fornisce dati e voglio mostrare questi dati in griglia, faccio il looping e il templating usando Angular o MVC? Chiamo il servizio API Web usando quale? Come decidi dall'inizio del progetto in che direzione stai andando?
Natalie, il

1
@Natalie Se i dati provengono dall'API Web, è probabile che tu li recuperi sul lato client. Ciò significa che stai vincolando in Angular, non .NET MVC. Non esegui esplicitamente il loop. Associare i dati alla griglia / tabella utilizzando ngRepeat . Per recuperare i dati, è consigliabile utilizzare il modulo $ http e chiamare l'endpoint dell'API Web. Per quanto riguarda decidere quale approccio usare, è strano. Non c'è una risposta in bianco e nero. Devi sperimentare, valutare e seguire il tuo istinto.
Scant Roger,

... una parola di cautela. Se non hai mai usato Angular o altri framework JavaScript a servizio completo in precedenza, dovrai dedicare alcune ore difficili all'apprendimento delle corde. Non sono necessariamente semplici. Posso assicurarti, tuttavia, che a lungo termine ti renderanno la vita più semplice. Lavorare duramente. Insisti. Farai alla grande.
Scant Roger,

1
@ScantRoger Mi scuso, ma la tua risposta non mi ha chiarito le cose. Se sto usando un framework lato server MVC, in cui la vista è agnostica, come posso collegare Angular con esso? Il server (l'API Web) contiene già le definizioni di Modello e Controller. Quindi, se uso Angular, mi viene imposto di nuovo MVC. Quindi finisce per essere MCVCM ...? (Definizioni di modello e controller sia sul lato client che sul lato server) Oppure è il motivo per cui non dovrei utilizzare un framework MVC sul lato client, come Angular, se sto già utilizzando un framework MVC per la mia API Web
Abdul

17

ASP.NET MVC è un framework lato server; non importa quali librerie JavaScript usi. AngularJS è una libreria lato client, a cui non importa quale tecnologia lato server sia alla base del sito Web: può essere Python, ASP.NET MVC o persino il semplice vecchio gruppo di file HTML statici archiviati direttamente sul disco.

ASP.NET MVC e AngularJS sono entrambi compatibili e ci sono molti progetti là fuori che li usano insieme.

Avete bisogno di usare entrambi? Non proprio. Dipende interamente dalle esigenze del tuo progetto.

  • Se il tuo sito Web è dinamico, devi utilizzare alcuni script lato server. È possibile utilizzare ASP.NET e il fatto che si sta utilizzando AngularJS non renderà il codice lato server più MVC. Se vuoi essere in grado di strutturare l'applicazione lato server come MVC, scegli ASP.NET MVC.

  • Allo stesso modo, il fatto che si sta utilizzando ASP.NET MVC non implica nulla sulla struttura del codice lato client. Puoi mettere tutto il tuo JavaScript in un singolo file senza pensare alla struttura ed essere contento (fino a quando il progetto non inizia a crescere). Anche in questo caso, AngularJS si presenta come un modo per strutturare l'applicazione sul lato client.


Nota a margine: hai taggato la tua domanda ASP.NET MVC 3. A meno che non si tratti di un progetto legacy da mantenere o di avere vincoli specifici quando si ospita l'applicazione su server legacy che non sono stati aggiornati negli ultimi quattro anni, è possibile utilizzare ASP .NET MVC 4 o 5 invece.


1
grazie MainMa. Sono consapevole che AngularJS è lato client e MVC è lato server. Sono anche consapevole che altre librerie come manubrio, knockoutjs possono essere utilizzate in MVC.NET e Angular può essere utilizzato in applicazioni php, java. Quello che mi chiedo è perché usarli entrambi insieme, poiché entrambi fanno la stessa cosa che è "MVC", ma uno è lato client e uno è lato server. Perché mescolare i framework MVC nel lato client e lato server? Non possiamo fare un'applicazione che sia solo un'applicazione angolare? O un'applicazione che è solo l'applicazione MVC.net?
Natalie, il

@Natalie: capisco. Ho modificato la risposta per fornire ulteriori informazioni al riguardo. Una risposta breve è che mescoli quei due framework in progetti in cui ha senso avere una struttura specifica sia sul lato server che su quello client.
Arseni Mourzenko,

Puoi dirmi, ad esempio, se c'è un'API Web che mi fornisce dati e voglio mostrare questi dati in griglia, faccio il looping e il templating usando Angular o MVC? Chiamo il servizio API Web usando quale? Come decidi dall'inizio del progetto in che direzione stai andando?
Natalie, il

Ho le stesse domande nella mia mente. Non sono riuscito a trovare alcun motivo per utilizzare asp.net MVC. Voglio dire, sembra che l'API Web Asp.net sul lato server e Angolare sul lato client siano sufficienti. Ma ho pensato prima; API Web = livello di accesso ai dati, Asp.Net MVC = livello di logica aziendale, angolare = livello dell'interfaccia utente. Ma dal lato angolare possiamo effettuare solo chiamate API Web, quindi non possiamo utilizzare il lato server MVC Asp.Net. Penso che abbiamo bisogno di un buon esempio del motivo per cui potremmo aver bisogno di usare Asp.Net MVC.
Salim,

9

Se si utilizza Visual Studio, esiste un nuovo modello di sito Web MVC "app a pagina singola" che include controller angolari e MVC Web Api.

Funziona bene perché il codice lato server MVC fornisce endpoint json per il codice lato client angolare da chiamare.

Inoltre, puoi utilizzare i controller MVC per offrire la vista html di base o le viste per l'app a pagina singola. questo ti dà la potenza della generazione lato server, autorizzazione, reindirizzamenti, gestione degli errori ecc

Spesso vorrai una piccola quantità di html / javascript generato dal server anche su una singola app per pagina, cose come gli endpoint url per ambienti diversi, lingue diverse o persino la pagina di autenticazione dispari che potrebbe essere più semplice da fare sul lato server.


1
Quando creo il modello SPA standard in VS 2015 CE, vedo bootstrap, jquery, knockout, reply e sammy nella cartella degli script, ma non angolare. Mi sto perdendo qualcosa?
TK-421,

2

3 anni dopo, utilizza l'API Web ASP.NET per pubblicare i tuoi dati e Angular (js o più recenti) per strutturare la tua app sul lato client. Se stai creando un sito statico, utilizza semplicemente ASP.NET MVC.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.