Quel est le lien entre Angular JS et Google Closure?

Maintenant que AngularJS 1.0 est disponible, je me demande comment ce projet s’intègre à l’autre framework / outil JavaScript généraliste de Google, Closure .

J’ai seulement vu la description de base de ces deux technologies (et lu environ la moitié du livre sur la fermeture), donc je n’ai aucune expérience directe, mais voici à quoi ça ressemble:

  • La fermeture est un ensemble de technologies pouvant être utilisées séparément. Ce que je trouve probablement le plus attrayant est:
    • Closure Comstackr, qui semble “corriger JavaScript” dans un sens qui met en garde contre les problèmes typiques, fournit des vérifications à la compilation (tous les utilisateurs ne le sont pas, mais la plupart des développeurs Google le font, et moi aussi). Et bien sûr, le code qui en résulte est plus petit et plus efficace.
    • Ensuite, j’aime certaines parties de Closure Library , par exemple les abstractions par rapport aux types ArrayLike ( ArrayLike etc.), les systèmes basés sur les classes, les mécanismes d’événement, les abstractions DOM, etc. non (semble être assez complexe et je n’ai pas encore eu le temps de l’étudier).
    • Ensuite, il y a quelques fonctionnalités que je ne trouve pas utiles, par exemple les modèles .
  • AngularJS , que j’ai seulement lu brièvement, semble être beaucoup plus haut que Closure. Il semble qu’il s’agisse d’un cadre d’application offrant des fonctionnalités telles que la liaison de données, les composants réutilisables, la structure MVC, etc.

Donc, ces deux technologies semblent viser un niveau d’abstraction bien différent, donc ma première pensée était: peuvent-elles être utilisées ensemble? Fermeture fournissant des abstractions de compilation et de navigation de bas niveau, tandis qu’Angular fournit des services et une structure au niveau de l’application? Cela aurait-il du sens et cela fonctionnerait-il bien ensemble?

    Le seul projet Google que je connaisse qui utilise AngularJS est l’équipe DoubleClick. (présentation) Essentiellement, ils utilisent encore Google Closure Library pour tout sauf le bâtiment de l’interface utilisateur. Notez également qu’ils utilisent Google Closure Comstackr, mais c’est presque une donnée, “personne” n’utilise que la bibliothèque sans le compilateur.

    Google Closure Library est livré avec un framework d’interface utilisateur dans son espace de noms goog.ui Ce cadre se compare pratiquement à tous les frameworks d’interface utilisateur non Web tels qu’Android, iOS, Swing et QT. Ils ont une chose que j’aime appeler les éléments DOM sur les stéroïdes, goog.ui.Component , qui a beaucoup de bons mécanismes de cycle de vie pour la récupération de place et l’écoute des événements et plus encore. Vous avez des choses comme goog.ui.Control , qui est une sous-classe de goog.ui.Component , et gère l’interaction utilisateur de manière très intéressante. Il vous permet, par exemple, de twigr des rendus afin que vous puissiez remplacer un par un sans modifier votre autre logique, à l’exception du rendu réel.

    En parlant de classes et de sous-classes, Google Closure Library a également ceci. Vous n’avez pas à utiliser celui intégré, le plus important est que vous appelez en quelque sorte le prototype de la “superclasse” dans vos méthodes. Vous pouvez par exemple utiliser le système de classes dans CoffeeScript, Google Closure Library ne vous intéresse pas.

    La raison pour laquelle l’équipe DoubleClick a choisi AngularJS était apparemment en grande partie à cause des fonctionnalités de liaison de données fournies par AngularJS. Il n’y a rien de intégré dans Google Closure Library pour mettre à jour automatiquement l’interface utilisateur lorsque les données changent.

    Donc, pour résumer, Google Closure est une bête huuuuge, et AngularJS peut remplacer la partie goog.ui de Google Closure Library.

    Je pense qu’AngularJS ressemble davantage à un framework MVC / MVVM solide et que Closure Library est un ensemble de composants non structurés, bien que les modèles AngularJS et les modèles de fermeture aient beaucoup en commun.