73 votes

Angular.js et ASP.NET MVC 4

J'ai un projet ASP.NET MVC 4 et je suis bloqué sur une décision architecturale concernant le cadre ou la bibliothèque JavaScript à utiliser : Angular.js ou Knock.js. Je penche actuellement pour l'utilisation d'Angular.js plutôt que de Knockout.js, mais je ne veux pas découvrir à mi-chemin du développement du projet que j'ai fait une erreur.

Voici le contexte :

  • Nous avons besoin d'une liaison bidirectionnelle des données du modèle
  • Nous avons besoin de la possibilité de tester les vues. Je veux être capable de faire des tests unitaires de bout en bout. De plus, nous utilisons l'intégration continue.
  • Fonctionnalité "Enregistrer les modifications" : si un utilisateur apporte des modifications à une page, nous devons être en mesure de détecter ces modifications et d'inviter l'utilisateur à les enregistrer avant de quitter la page.
  • Fonctionnalité de "notifications". Par exemple, l'utilisateur sera connecté environ 8 heures et devra être informé et mis à jour des modifications apportées par d'autres utilisateurs (erreurs, modifications de l'état des données, etc.).
  • Nous devons "préparer l'avenir" de notre application. Actuellement, l'unité commerciale n'a pas décidé si nous devrons 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 dont les niveaux d'expérience varient de très jeunes à des développeurs seniors.
  • Actuellement, nos modèles sont compliqués et pourraient le devenir encore plus.
  • Nous devons également tenir compte de la RAD, de la réutilisation du code et de la maintenabilité.

J'ai lu l'excellente réponse aquí et regardé l'interview de Scott Allen sur Angular aquí

Puisque nous ne sommes pas en mesure de passer de notre architecture actuelle ASP.NET MVC 4 à l'utilisation de quelque chose du côté serveur comme l'API Web, j'ai quelques préoccupations en essayant de mettre en œuvre Angular.js avec MVC 4. Cela nous obligera-t-il à avoir deux modèles, un sur le serveur et un sur le client ?

Je ne cherche pas à avoir une discussion sur "ce qui est mieux" entre Angular et Knockout, car je pense qu'ils ont tous deux leurs avantages et leurs inconvénients. Je cherche du code réel sur la mise en œuvre d'un framework ou d'une bibliothèque JavaScript dans une application ASP.NET MVC 4. J'ai besoin d'une solution avec laquelle je pourrai vivre dans plus de deux ans :)

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

57voto

Anton Points 3371

Mes deux centimes d'euros.

préambule - j'ai travaillé à la fois avec angular et knockout. J'en suis à mon troisième front-end non trivial construit avec une librairie MVVM/MVC.

J'ai commencé avec knockout parce que son MVVM est très similaire à la mécanique de wpf/silverlight. Et cela fonctionne bien. Les tutoriels et la documentation sont excellents. Tous vos codeurs seront capables de travailler avec knockout.js en quelques jours ou, s'ils ont utilisé MVVM sous .net, en quelques heures.

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

  • angular est un cadre complet - knockout ne concerne que les deux éléments. vous avez toujours besoin d'autres bibliothèques comme backbone.js/jquery pour faire le reste du travail.

  • angular dispose de l'injection de dépendance, ce qui est parfait pour ajouter
    mocking pour les tests ainsi que pour donner une structure à votre code.

  • angular traite les variables JS normales comme des observables dans son $scope ce qui signifie qu'il n'est pas nécessaire de les déclarer d'une manière particulière.

Je ne suis pas un fan d'Angular, mais je pense quand même qu'ils pourraient se tourner davantage vers l'architecture MVVM au lieu de l'architecture hybride MVVM/MVC "funky" qu'ils ont actuellement.

Le plus gros problème avec Angular est la documentation. Comparée à knockout, elle est lamentable. Cela ajoutera du temps et des coûts supplémentaires pour mettre vos codeurs à niveau. Mais une fois qu'ils sont prêts, c'est actuellement le meilleur choix, à mon avis.

21voto

Que Points 491

Heureux de voir que ces questions ont intéressé la communauté ;) Juste pour être complet, voici ce que j'ai fini par faire :

J'ai opté pour AngularJS et ASP.NET MVC 4 et j'en suis heureux. Bien qu'Angular ait une courbe d'apprentissage raide, cela en vaut la peine en raison de la puissance des directives.

  • Nous avons besoin d'une liaison bidirectionnelle des données du modèle - Il m'est arrivé de devoir définir certaines valeurs initiales provenant du contrôleur MVC. J'ai utilisé l'attribut ng-init pour y parvenir.
  • Nous avons besoin de la capacité de tester les vues - j'ai suivi la Documentation sur AngularJS pour les essais
  • Fonctionnalité "Enregistrer les modifications" - je l'ai mise en œuvre en utilisant une directive dans Angular
  • Fonctionnalité "Notifications" - je l'ai implémentée en utilisant toastr.js et et des directives (schweet)
  • Je ne connais pas les plans de Google pour AngularJS, mais après avoir travaillé avec AngularJS, je ne le vois pas disparaître de sitôt et je m'attends à ce qu'il soit plus largement adopté :)

12voto

Joseph Gabriel Points 3322

Je n'ai pas beaucoup d'informations sur AngularJs, mais je souhaite vous faire part de mes réflexions sur Knockout.

Knockout est principalement une bibliothèque de liaison de données pour connecter les vues au modèle de vue, mais ne fournit pas vraiment beaucoup de capacités au-delà de cela. Je ne recommanderais pas d'utiliser Knockout seul comme bibliothèque principale pour construire un site Web complexe basé sur le client.

Vous n'avez pas précisé si vous implémentez une fonctionnalité de type spa (par exemple, la navigation par hachage) ou si vous utilisez principalement des vues MVC côté serveur (par exemple, Razor). Si vous recherchez simplement une liaison de données rapide au niveau de chaque page, je reconsidérerais même cette solution. Pour moi, ces deux outils (angular ou knockout) sont conçus pour améliorer l'expérience de développement côté client, et non pour une approche côté serveur telle que MVC.

Si vous envisagez d'adopter une approche SPA, même en partie, vous voudrez probablement disposer d'un cadre qui offre un certain niveau de contrôle sur le cycle de vie de l'activation des vues.

En ce qui concerne le pouvoir de liaison des données et la fiabilité, je crois en Knockout. Je l'ai utilisé de manière intensive et j'en suis devenu très friand. Si vous aimez la sensation de Knockout, vous pouvez vous intéresser à Durandal . Durandal est un cadre décent est capable de répondre aux besoins de nombreux projets web "spa". Il s'agit d'un framework côté client construit sur la base de plusieurs bibliothèques éprouvées, dont Knockout. Il est un peu (beaucoup) plus léger qu'Angular, et peut-être plus facile à utiliser.

Nous construisons un site Web ASP.Net MVC assez important en utilisant Durandal avec Knockout en conjonction avec une façade supplémentaire pour resserrer les choses 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 le matériel Knockout côté serveur qui existe ; je trouve que cela limite la puissance réelle du modèle MVVM.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X