¿Debo usar AngularJS y ASP.NET MVC?

58

Empecé a aprender AngularJS y ASP.NET MVC, pero no estoy seguro de por qué usarlos juntos en el mismo proyecto.

¿No son ambos marcos MVC? ¿Debo usarlos en la misma aplicación? ¿No es uno u otro?

Natalie
fuente

Respuestas:

74

Si está creando una aplicación de página única (SPA) , entonces probablemente no necesite el "MVC" en ASP.NET MVC . Es probable que las vistas, especialmente las vistas dinámicas, se entreguen / manipulen del lado del cliente. Manijas angulares que bien.

Pero quizás no quieras un SPA 100%. ¿Y que? Imagine en cambio 10 páginas, pero 10 páginas que son muydinámica. Después de que un usuario inicia sesión, hay una pequeña insignia de usuario en la esquina derecha. Eso no es dinámico. Solo muestra algunas cosas ingeniosas como la "puntuación" del usuario y su última selfie. Guarda en caché las cosas ingeniosas para que puedan recuperarse fácilmente. Ahora, puedes ir de dos maneras con esto. Si eres un purista de MVC del lado del cliente, solo obtienes los datos de la insignia después de que se entregue la carga útil HTML inicial, al igual que todos los demás datos. Pero tal vez no eres un purista. Quizás eres lo opuesto a un purista. Tal vez eres un impurista. Entonces, en lugar de entregar el HTML inicial, entregar algo de JavaScript que se publicará de nuevo en su servidor, se publicará a través de JavaScript para obtener datos de la insignia y, finalmente, fusionará esos datos en una vista a través del MVC del lado del cliente,eso como tu HTML inicial. Después de que se entregue su HTML inicial, continúe con sus payasadas MVC típicas del lado del cliente.

Entonces ... MVC en el servidor y en el cliente es solo una forma conveniente de organizar el código que solía ser un desastre en 2001. No tiene que elegir uno u otro. Puedes elegir ambos. Por supuesto, cuanto más hagas después de que se entregue ese HTML inicial, menos necesitarás MVC del lado del servidor. Aún así, está ahí para ti si lo necesitas. Por ejemplo, trabajé en una aplicación ASP.NET MVC / Angular donde las plantillas angulares externas en realidad podrían ser .NET MVC ActionResult. Eso significa que su controlador de servidor podría fusionar datos en su vista, entregarlos a Angular como plantilla, y el controlador de Angular podría fusionar sus datos en la vista. No digo que sea una buena idea, pero solo muestra que una forma de MVC no deja obsoleta a la otra.

Además, no importa cómo implemente Angular, necesitará una forma de entregar ese HTML inicial, las plantillas y, lo más importante, los datos. ¿Por qué no usar una plataforma que lo hace fácil? Hay muchos, pero .NET MVC no se queda atrás. Como dije, puede hacer que el HTML inicial y las plantillas angulares externas sean el resultado de una acción MVC, pero mejor aún, puede usar la API web de .NET para entregar los datos. La API web es tan deliciosa como la compota de albaricoque.

Resumido: MVC es solo un patrón. Es posible que desee utilizar ese patrón en cualquier número de capas físicas. No se puede agotar. Úselo libremente si tiene sentido. Además, Angular puede no ser MVC de todos modos (eso dicen las personas que se preocupan por estas cosas), así que siéntase libre de usarlo con una herramienta que tenga "MVC" en el nombre. Demonios, incluso si es MVC, mezcla y combina como desees.

Roger escaso
fuente
3
Increíble respuesta. Muchas gracias por tu explicación +1
Natalie
¿Puede decirme, por ejemplo, si hay una API web que me proporciona datos y quiero mostrar estos datos en la cuadrícula, hago el bucle y la plantilla con Angular o MVC? ¿Llamo al servicio de API web con qué cómo? ¿Cómo decides desde el principio del proyecto qué camino tomarás?
Natalie
1
@Natalie Si los datos provienen de la API web, es probable que los obtenga del lado del cliente. Esto significa que está vinculando en Angular, no en .NET MVC. No haces un bucle explícitamente. Vincula los datos a su cuadrícula / tabla usando ngRepeat . Para obtener los datos, es probable que use el módulo $ http y llame al punto final de su API web. En cuanto a decidir qué enfoque usar, eso es peculiar. No hay respuesta en blanco y negro. Tienes que experimentar, evaluar y seguir tus instintos.
Escaso Roger
... una palabra de precaución. Si no ha utilizado Angular u otro marco de JavaScript de servicio completo antes, deberá pasar algunas horas difíciles aprendiendo las cuerdas. No son necesariamente sencillos. Sin embargo, te puedo asegurar que a la larga te harán la vida más fácil. Trabaja duro. Quedarse con eso. Lo harás genial.
Escaso Roger
1
@ScantRoger Pido disculpas, pero su respuesta no me aclaró las cosas. Si estoy usando un marco MVC del lado del servidor, donde la Vista es independiente, ¿cómo relaciono Angular con ella? El servidor (la API web) ya contiene las definiciones de Modelo y Controlador. Entonces, si uso Angular, se me impondrá MVC nuevamente. Entonces, ¿termina siendo MCVCM ...? (Definiciones de modelo y controlador tanto en el lado del cliente como en el lado del servidor) O esa es la razón por la que no debería usar un marco MVC del lado del cliente, como Angular, si ya estoy usando un marco MVC para mi API web
Abdul
17

ASP.NET MVC es un marco del lado del servidor; no le importa qué bibliotecas de JavaScript utilizas. AngularJS es una biblioteca del lado del cliente, a la que no le importa qué tecnología del lado del servidor impulse el sitio web: puede ser Python, ASP.NET MVC o incluso el viejo montón de archivos HTML estáticos almacenados directamente en el disco.

ASP.NET MVC y AngularJS son compatibles, y hay muchos proyectos que los usan juntos.

¿ Necesitas usar ambos? Realmente no. Depende completamente de las necesidades de su proyecto.

  • Si su sitio web es dinámico, debe usar algunas secuencias de comandos del lado del servidor. Podría usar ASP.NET, y el hecho de que esté usando AngularJS no hará que su código del lado del servidor sea más MVC. Si desea poder estructurar su aplicación del lado del servidor como MVC, preferirá elegir ASP.NET MVC.

  • Del mismo modo, el hecho de que esté utilizando ASP.NET MVC no implica nada sobre la estructura de su código del lado del cliente. Puede poner todo su JavaScript en un solo archivo sin pensar en la estructura y estar contento con eso (hasta que el proyecto comience a crecer). Una vez más, AngularJS se presenta como una forma de estructurar su aplicación en el lado del cliente.


Nota al margen: etiquetó su pregunta ASP.NET MVC 3. A menos que sea un proyecto heredado que deba mantener o tenga restricciones específicas cuando aloje la aplicación en servidores heredados que no se actualizaron durante los últimos cuatro años, puede usar ASP .NET MVC 4 o 5 en su lugar.

Arseni Mourzenko
fuente
1
gracias MainMa. Soy consciente de que AngularJS es del lado del cliente y MVC es del lado del servidor. También soy consciente de que otras bibliotecas, como manillares, knockoutjs, se pueden usar en MVC.NET y Angular se puede usar en aplicaciones php, java. Lo que pregunto es por qué usarlos juntos, ya que ambos hacen lo mismo que es "MVC", pero uno es del lado del cliente y otro del lado del servidor. ¿Por qué mezclar los marcos MVC en el lado del cliente y del servidor? ¿No podemos hacer una aplicación que es solo una aplicación angular? ¿O una aplicación que es solo la aplicación MVC.net?
Natalie
@ Natalie: Ya veo. Edité la respuesta para proporcionar más información al respecto. Una respuesta breve es que combina esos dos marcos en proyectos donde tiene sentido tener una estructura específica tanto en el lado del servidor como del cliente.
Arseni Mourzenko
¿Puede decirme, por ejemplo, si hay una API web que me proporciona datos y quiero mostrar estos datos en la cuadrícula, hago el bucle y la plantilla con Angular o MVC? ¿Llamo al servicio de API web con qué cómo? ¿Cómo decides desde el principio del proyecto qué camino tomarás?
Natalie
Tengo las mismas preguntas en mi mente. No pude encontrar una razón para usar asp.net MVC en absoluto. Quiero decir que parece Asp.net Web API en el lado del servidor y Angular en el lado del cliente sería suficiente. Pero pensé primero; API web = capa de acceso a datos, Asp.Net MVC = capa de lógica de negocios, angular = capa de interfaz de usuario. Pero desde el lado angular solo podemos hacer llamadas a la API web, por lo que no podemos usar el lado del servidor Asp.Net MVC. Creo que necesitamos un buen ejemplo de por qué podemos necesitar usar Asp.Net MVC.
Salim
9

Si está utilizando Visual Studio, hay una nueva plantilla de sitio web MVC de 'aplicación de una sola página' que incluye controladores angulares y MVC Web Api.

Esto funciona bien porque su código del lado del servidor MVC proporciona puntos finales json para que llame el código del lado angular del cliente.

Además, puede usar los controladores MVC para servir la vista o vistas html básicas para su aplicación de página única. esto le da el poder de la generación del lado del servidor, autorización, redireccionamientos, manejo de errores, etc.

A menudo, querrá una pequeña cantidad de html / javascript generado por el servidor, incluso en una aplicación de una sola página, cosas como URL de punto final para diferentes entornos, diferentes idiomas o incluso la página de autenticación extraña que puede ser más fácil de hacer en el lado del servidor.

Ewan
fuente
1
Al crear la plantilla SPA estándar en VS 2015 CE, veo bootstrap, jquery, knockout, respond y sammy en la carpeta del script, pero no angular. ¿Me estoy perdiendo de algo?
TK-421
2

3 años después, use la API web ASP.NET para entregar sus datos y Angular (js o más reciente) para estructurar su aplicación en el lado del cliente. Si está creando un sitio estático, simplemente use ASP.NET MVC.

usuario441521
fuente