jeudi 28 février 2013

AngularJS, ce n'est pas pour jouer


De nombreux messages ont circulé hier sur Twitter annonçant un jeu en ligne, Bombermine, réalisé avec AngularJS. Étonnant... mais erroné. J’ai moi-même rediffusé un de ces messages, avant de regarder de plus près et de voir qu’AngularJS n’est utilisé que pour l’interface utilisateur, mais que le jeu lui-même est écrit avec GWT.

AngularJS est particulièrement efficace pour la réalisation d’application web, mais pas du tout adapté à la création de jeux.

CRUD... au sens large


Les développeurs d’AngularJS le présentent comme un framework destiné à la réalisation d’applications de type “CRUD” (Create - Read - Update - Delete), c’est-à-dire des applications web affichant des données, et permettant de les saisir ou de les modifier.

C’est effectivement le cas, si l’on ne prend pas le terme CRUD dans un sens trop restrictif, voire péjoratif. Il ne faut pas imaginer des applications réduites à l’affichage de trois pauvres formulaires, bien au contraire.


Le cœur d’AngularJS, c’est son système de vues dynamiques rafraîchies automatiquement, et fonctionnant par du data-binding à double sens. Les vues d’AngularJS constituent la représentation d’un état des données du modèle, et c’est le critère qui permet de voir quand ce framework est adapté. Il est pertinent pour toutes les applications dont l’interface est essentiellement une représentation de données facilement modélisables sous la forme d’objets JavaScript.

Mais ce n’est pas forcément un simple affichage de texte ou de formulaires, la représentation peut être bien plus sophistiquée que ça, on peut avoir des graphiques, des cartes géographiques, des schémas en SVG, comme dans ces quelques exemples :



Ces exemples présentent des utilisations d’AngularJS très pertinentes, car il s’agit bien de représentation de données, où le principe de binding dans les vues dynamiques facilite largement la tâche du développeur. En fait le type d'application CRUD où AngularJS est très efficace couvre la quasi-totalité des applications de gestion.

Quand AngularJS n’est pas approprié


Là où AngularJS est déconseillé, c’est quand l’application web ne représente pas directement des données, quand on ne peut pas créer la vue par des bindings simples sur un ensemble d’objets JavaScript.

L’exemple que cite généralement Miško Hevery, c’est Google Documents. L’interface de traitement de texte de Google Documents est beaucoup plus complexe qu’une simple vue HTML représentant l’état d’un modèle de données. C’est vraiment un cas où AngularJS n’apporterait rien au développeur, et serait même totalement inapproprié.

L’autre cas typique, c’est la création de jeux. Bon évidemment, il y a quelques jeux où ce qui s’affiche est une représentation assez simple d’un état des données. Un jeu d’échecs par exemple : l’échiquier affichant la position des pièces, c’est juste la représentation d’un tableau à deux dimensions en JavaScript ; pour la partie IA, c’est une toute autre histoire... Mais sur des jeux un peu plus animés, la part de binding sur les données devient minime par rapport à la complexité du dessin et des animations, et essayer d’utiliser AngularJS serait une erreur.

Pour des adaptations de jeux de plateau, jeux de cartes ou wargames, AngularJS peut être pertinent, et on peut imaginer un système du type de Vassal basé sur AngularJS. Etant un fervent adepte de ce genre de jeux, je creuserai peut-être cette idée un de ces jours.

More fun ?


Bon d’accord, AngularJS n’est pas fait pour créer des jeux, mais ça peut quand même être amusant à utiliser. Le premier slogan qui était imprimé sur les tee-shirts à l’époque où AngularJS était en beta et que son logo de super-héros n’avait pas encore été créé, c’était “10x less code, 10x more fun”. Certes le dix fois moins de code était un peu exagéré, mais pas tant que ça, et l’aspect amusant voire ludique mis en avant est bien réel.

Le haut niveau d’abstraction d’AngularJS fait qu’on écrit vraiment la logique de présentation de son application web, au lieu d'accumuler la frustration en passant son temps à bricoler le DOM pour essayer d’arriver à faire marcher quelque chose. Le côté gratifiant pour les développeurs, c’est un aspect très important à prendre en compte quand on choisit une plate-forme, car c’est ce qui les motive les plus.

Qui sait, peut-être qu’un jour on verra dans l’informatique des syndicats qui revendiqueront de travailler avec AngularJS.

1 commentaire: