web-dev-qa-db-fra.com

Angular.js et ASP.NET MVC 4

J'ai un projet ASP.NET MVC 4 et je suis bloqué sur une décision architecturale sur le framework ou la bibliothèque JavaScript à utiliser Angular.js ou Knock.js. Je suis actuellement enclin à utiliser Angular.js au lieu de Knockout.js, mais je ne veux pas savoir à mi-chemin pendant le développement du projet que j'ai commis une erreur.

Voici quelques informations:

  • Nous avons besoin d'une liaison de données de modèle bidirectionnelle
  • Nous devons avoir la possibilité de tester des vues. Je veux pouvoir faire des tests unitaires de bout en bout. De plus, nous utilisons l'intégration continue.
  • Fonctionnalité "Enregistrer les modifications". c'est-à-dire que si un utilisateur apporte des modifications à une page, nous avons besoin de la capacité de détecter toute modification et de l'inviter à enregistrer ses modifications avant qu'il ne quitte la page.
  • Fonctionnalité "Notifications". c'est-à-dire que l'utilisateur sera connecté environ 8 heures plus tard et devra être averti et mis à jour des modifications apportées par les autres utilisateurs (erreurs, modifications de l'état des données, etc.)
  • Nous devons "pérenniser" notre application. Actuellement, la business unit n'a pas encore décidé si nous aurions besoin de prendre en charge les appareils mobiles, mais je sais que ce n'est qu'une question de temps.
  • Notre équipe est composée de développeurs ayant différents niveaux d’expérience, allant des développeurs très débutants aux développeurs expérimentés.
  • Actuellement, nos modèles sont compliqués et peuvent l’être encore plus.
  • Nous devons également prendre en compte la RAD, la réutilisation du code et la maintenabilité

J'ai lu l'excellente réponse ici et regardé l'interview de Scott Allen à propos de Angular ici

Étant donné que nous ne sommes pas en mesure de changer d’architecture ASP.NET MVC 4 actuelle pour utiliser quelque chose du côté serveur, tel que l’API Web, j’ai quelques préoccupations en essayant de mettre en œuvre Angular.js avec MVC 4. nous avons deux modèles un sur le serveur et un sur le client?

Je ne cherche pas une discussion "Quel est le meilleur" à propos de Angular et Knockout, car je pense qu’ils ont tous les deux le pour et le contre. Je recherche le code réel sur la mise en oeuvre d’un framework JavaScript ou d’une bibliothèque dans une application ASP.NET MVC 4. Il me faut une solution avec laquelle je puisse vivre avec 2 ans ou plus :)

Des idées ou des suggestions? Peut-être que la réponse n’est pas Knock ou Angular, mais un autre framework JavaScript?

73
Que

Heureux de voir que ces questions intéressaient la communauté;) Juste pour compléter, voici ce que j'ai fini par faire:

Je suis allé avec AngularJS et ASP.NET MVC 4 et j'étais heureux de l'avoir fait. Bien que, Angular a une courbe d'apprentissage abrupte, mais cela en vaut la peine en raison du pouvoir des directives.

  • Nous avons besoin d'une liaison de données de modèle bidirectionnelle - À l'occasion, je devais définir certaines valeurs initiales provenant du contrôleur MVC. J'ai utilisé l'attribut ng-init pour accomplir cela.
  • Nous avons besoin de la possibilité de tester les vues - j'ai suivi les docs AngularJS pour les tests
  • Fonctionnalité "Enregistrer les modifications" - je l'ai implémentée à l'aide d'une directive angulaire
  • Fonctionnalité "Notifications" - j'ai implémenté cela en utilisant toastr.js et et directives (schweet)
  • Nous devons "préparer l'avenir" de notre application. Je ne connais pas les projets de Google concernant AngularJS, mais après avoir travaillé avec AngularJS, je ne peux pas le voir aller de sitôt et je m'attendais à ce qu'elle soit plus largement adoptée :)
21
Que

mes 2 cents vaut.

préambule - J'ai travaillé avec angular et KO. Je suis sur mon 3ème front non trivial construit avec une lib MVVM/MVC.

J'ai commencé avec knockout parce que son MVVM est très similaire à la mécanique wpf/silverlight. Et ça marche bien. Les tutoriels et la documentation sont de premier ordre. Tous vos codeurs pourront travailler avec knockout.js en quelques jours ou s’ils ont utilisé mvvm sous .net, puis en quelques heures.

Cependant, ces jours-ci, j'utilise angular et je vais probablement m'en tenir à cela pour les raisons suivantes.

  • angular est un cadre complet - knock-out concerne en réalité la liaison à double sens. vous avez toujours besoin d'autres bibliothèques telles que backbone.js/jquery pour faire le reste de votre travail.

  • angulaire a injection de dépendance. ce qui est parfait pour ajouter
    se moquant des tests et structurant votre code.

  • angular traite les variables JS normales en tant qu'observables dans son objet $ scope. cela signifie que vous n'avez pas à les déclarer d'une manière spéciale

Je ne suis pas un angular fanboy, je pense toujours qu'ils pourraient passer davantage à l'architecture MVVM au lieu de l'architecture hybride "funky" MVVM/MVC qu'ils ont actuellement.

Le plus gros problème avec angular est la documentation. Comparé à KO, c'est lamentable. Il faudra plus de temps et d’argent pour mettre vos codeurs à niveau. Une fois qu’ils sont là cependant, c’est actuellement le meilleur choix à mon humble avis.

57
Anton

Je n'ai pas beaucoup d'informations sur AngularJs, mais je souhaite donner quelques réflexions sur Knockout.

Knockout est principalement une bibliothèque de liaison de données permettant de connecter des vues pour voir un modèle, mais ne fournit pas beaucoup de fonctionnalités au-delà. Je ne recommanderais pas d'utiliser uniquement Knockout comme bibliothèque principale pour créer un site Web complexe basé sur le client.

Vous n'avez pas indiqué si vous implémentiez une fonctionnalité de type spa (navigation avec balises de hachage, par exemple) ou si vous utilisiez principalement des vues côté serveur MVC (par exemple, Razor). Si vous recherchez simplement une liaison de données rapide au niveau de chaque page, je le reconsidérerais même. Pour moi, les deux (angulaires ou knock-out) sont conçus pour améliorer l'expérience de développement côté client - pas tellement une approche côté serveur telle que MVC.

Si vous envisagez une approche SPA, même partiellement, vous souhaiterez probablement un cadre offrant un certain niveau de contrôle sur le cycle de vie de l'activation de la vue.

En ce qui concerne la puissance de liaison des données et la fiabilité, je crois en Knockout. Je l'utilise beaucoup et je l'aimais beaucoup. Si vous aimez la sensation de knock-out, vous voudrez peut-être examiner Durandal . Durandal est un cadre décent capable de répondre aux besoins de nombreux projets web "spa". C'est un framework côté client construit sur plusieurs bibliothèques éprouvées, y compris Knockout. C'est un peu (beaucoup) plus léger que Angular, et peut-être plus facile à utiliser.

Nous construisons un site Web assez volumineux ASP.Net MVC en utilisant Durandal avec Knockout conjointement avec une façade supplémentaire afin de resserrer les liens du point de vue du développement, et l’intégration avec ASP.Net MVC est simple. Je ne recommande pas d'essayer d'utiliser les ressources de désactivation côté serveur qui sont disponibles; Je trouve juste que limiter le pouvoir réel du modèle MVVM.

12
Joseph Gabriel