with net mvc framework example asp and asp.net-mvc-4 angularjs knockout.js javascript javascript-framework

asp.net-mvc-4 - example - angularjs asp.net mvc entity framework



Angular.js y ASP.NET MVC 4 (3)

Tengo un proyecto ASP.NET MVC 4 y estoy atascado en una decisión arquitectónica sobre qué marco de JavaScript o biblioteca usar Angular.js o Knock.js. Actualmente me estoy inclinando por usar Angular.js en lugar de Knockout.js, pero no quiero encontrar información a mitad de camino durante el desarrollo del proyecto. Cometí un error.

Aquí hay algunos antecedentes:

  • Necesitamos enlace de datos de modelo bidireccional
  • Necesitamos la capacidad de probar vistas. Quiero poder hacer pruebas de unidad de extremo a extremo. Además, estamos usando integración continua.
  • La funcionalidad "Guardar cambios". es decir, si un usuario realiza cambios en una página, necesitamos la capacidad de detectar cualquier cambio y pedirle al usuario que guarde sus cambios antes de que naveguen fuera de la página.
  • Funcionalidad "Notificaciones". es decir, el usuario iniciará sesión aproximadamente durante 8 horas y deberá recibir notificaciones y actualizaciones de los cambios realizados por otros usuarios (errores, cambios en el estado de los datos y similares)
  • Necesitamos "probar a futuro" nuestra aplicación. Actualmente, la unidad de negocios no ha decidido si necesitaremos dispositivos móviles, pero sé que es solo cuestión de tiempo.
  • Nuestro equipo está formado por desarrolladores con distintos niveles de experiencia, desde desarrolladores de nivel junior hasta senior.
  • Actualmente nuestros modelos son complicados y pueden ser incluso más
  • También debemos considerar RAD, reutilización de código y mantenibilidad

He leído la excelente respuesta here y vi la entrevista de Scott Allen sobre Angular here

Como no podemos cambiar nuestra arquitectura actual ASP.NET MVC 4 para usar algo del lado del servidor como la API web, tengo algunas concerns al tratar de implementar Angular.js con MVC 4. ¿Esto nos causará tener dos modelos uno en el servidor y uno en el cliente?

No estoy buscando una discusión "mejor" sobre Angular y Knockout porque creo que ambos tienen sus pros y sus contras. Estoy buscando un código real para implementar un marco de JavaScript o una biblioteca en una aplicación ASP.NET MVC 4. Necesito una solución con la que pueda vivir dentro de 2 años o más :)

Alguna idea o sugerencia? Tal vez la respuesta no sea Knock o Angular, sino algún otro marco de JavaScript?


Me alegra ver que estas preguntas fueron de interés para la comunidad;) Para completar, esto es lo que terminé haciendo:

Fui con AngularJS y ASP.NET MVC 4 y me alegré de haberlo hecho. Aunque, Angular tiene una curva de aprendizaje empinada pero vale la pena debido al poder de las directivas.

  • Necesitamos el enlace de datos del modelo de dos vías: en ocasiones necesitaba establecer algunos valores iniciales provenientes del controlador MVC. Usé el atributo ng-init para lograr esto.
  • Necesitamos la capacidad de probar vistas: seguí los documentos de AngularJS para probarlos
  • Funcionalidad "Guardar Cambios" - Implementé esto usando una directiva en Angular
  • Funcionalidad "Notificaciones" - Implementé esto usando toastr.js and directivas (schweet)
  • Necesitamos "probar a futuro" nuestra aplicación. No conozco los planes de Google para AngularJS, pero después de trabajar con AngularJS no puedo ver que vaya a ningún lado en el corto plazo y espero que sea adoptado más ampliamente :)

No tengo mucha información sobre AngularJs, pero quiero dar algunas ideas sobre Knockout.

Knockout es principalmente una biblioteca de enlace de datos para conectar vistas para ver el modelo, pero en realidad no ofrece muchas más capacidades. No recomendaría usar knockout solo como la biblioteca principal para construir un sitio web complejo basado en el cliente.

No mencionó si está implementando una funcionalidad similar a un spa (es decir, navegación con etiqueta hash) o si está utilizando principalmente vistas del lado del servidor MVC (por ejemplo, Razor). Si solo buscas un enlace de datos rápido en un nivel por página, incluso lo reconsideraría. Para mí, ambos (angular o knockout) están diseñados para mejorar la experiencia de desarrollo del lado del cliente, no tanto un enfoque del lado del servidor como MVC.

Si está considerando un enfoque de SPA, incluso en parte, es probable que desee un marco que brinde cierto nivel de control sobre el ciclo de vida de activación de la vista.

En cuanto a potencia y confiabilidad de enlace de datos, creo en Knockout. Lo he estado usando extensamente, y me he encariñado bastante con él. Si te gusta la sensación de nocaut, es posible que desee investigar sobre Durandal . Durandal es un marco decente capaz de satisfacer las necesidades de muchos proyectos web "spa". Es un marco del lado del cliente construido sobre varias bibliotecas comprobadas, incluido Knockout. Es un poco (mucho) más ligero que angular, y posiblemente más fácil de usar.

Estamos construyendo un sitio web ASP.Net MVC bastante grande usando Durandal con Knockout junto con una fachada adicional para ajustar las cosas desde el punto de vista del desarrollo, y la integración con ASP.Net MVC es directa. No recomiendo tratar de usar las cosas del nocaut del lado del servidor que están por ahí; Solo lo encuentro para limitar la potencia real del patrón MVVM.


mi valor de 2 centavos.

preámbulo: he trabajado con angular y knockout. Estoy en mi tercera interfaz no trivial construida con una lib de MVVM / MVC.

Empecé con knockout porque su MVVM es muy similar a la mecánica wpf / silverlight. Y funciona bien Los tutoriales y la documentación son de primera clase. Todos sus codificadores podrán trabajar con knockout.js en cuestión de días o si han utilizado mvvm en .net, y en cuestión de horas.

Sin embargo, estos días estoy usando angular y probablemente me quedo con él por las siguientes razones.

  • angular es un marco completo: el knockout se trata solo de la unión bidireccional. todavía necesita otras bibliotecas como backbone.js / jquery para hacer el resto de su trabajo.

  • angular tiene inyección de dependencia. que es perfecto para agregar
    burlarse de las pruebas, así como dar estructura a su código.

  • angular trata las variables JS normales como observables dentro de su objeto $ scope. eso significa que no tienes que declararlos de una manera especial

No soy fanático de los ángulos, todavía creo que podrían pasar más a la arquitectura MVVM en lugar de la arquitectura híbrida "funky" MVVM / MVC que tienen actualmente.

El mayor problema con angular es la documentación. Comparado con el nocaut, es lamentable. Agregará tiempo y costo adicional para acelerar sus codificadores. Una vez que están allí, sin embargo, actualmente es la mejor opción en mi humilde opinión.