IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Object Model 2.0 : sortie d'une nouvelle version majeure
Pour la solution de typage fort dynamique

Le , par SylvainPV

52PARTAGES

4  0 

Certains d'entre vous le savent déjà peut-être, je travaille depuis maintenant huit mois sur une bibliothèque JavaScript baptisée Object Model chargée d'apporter un typage dynamique fort en JavaScript. JavaScript est déjà un langage typé à typage dynamique, mais ce typage est très libertaire et ne fournit pas du point de vue du développeur les avantages présupposés du typage dans un langage de programmation. De ce fait, on ne peut pas considérer que JavaScript ait un typage fort, même si cela peut encore faire débat. Ce qui fait que des erreurs de types sont encore sources de nombreux bugs dans les applications JavaScript.

Des outils comme TypeScript de Microsoft ou Flow de Facebook sont apparus dans ce sens pour essayer d'éliminer ces erreurs. Il s'agit là d'un typage statique, contrairement à ObjectModel qui renforce le typage dynamique de JavaScript. Cela signifie que ces solutions ne permettent pas de valider les types des données à l'exécution, seulement à la compilation.

C'est un bon premier pas mais le typage statique est, de ma propre expérience, insuffisant pour prévenir la majorité des bugs issus d'erreurs de types. Cela vient du fait que dans le cadre d'applications JavaScript, nous reposons énormément sur des sources non prédictibles de données :
- saisies utilisateur
- dépendances externes (CDN, npm, bower..)
- web services et API externes

Nous avons aussi souvent recours à des API pour communiquer en JSON ou XML entre notre front-end et notre back-end. Cette communication est souvent régie par un contrat d’interfaçage purement théorique. Si une modification du back-end a un impact sur les données renvoyées par les API et provoque un bug sur l'application, le développeur front-end perd du temps à identifier la source du problème (et peste contre le développeur API ensuite). Le typage statique ne permet pas de contrôler la validité des réponses des API puisque celles-ci arrivent à l'exécution.

D'où l'intérêt d'une solution de typage dynamique comme Object Model: à chaque affectation ou modification d'une donnée de vos modèles lors de l'exécution, les modèles sont validés. Cette validation diminue légèrement les performances du code, mais vous permet d'identifier bien plus rapidement la source d'un problème grâce aux exceptions générées. Object Model est aussi bien plus simple à maîtriser que TypeScript: pas de nouveau langage, pas de phase de compilation, il se présente simplement sous la forme d'une micro-bibliothèque JavaScript.

Les fonctionnalités offertes par Object Model sont nombreuses :
  • Typage d'objets à plusieurs niveaux
  • Liste typées
  • Typage d'arguments et de valeur de retour des fonctions
  • Union de types
  • Enumerations
  • Assertions personnalisées
  • Propriétés optionnelles
  • Valeurs par défaut
  • Parcours null-safe d'objet
  • Héritage simplifié avec les extensions de modèles
  • Propriétés constantes et privées basées sur des conventions de nommage
  • Messages d'erreur explicites


Le tout ne pèse que 6.8 Ko (1.4 Ko gzippé), n'a aucune dépendance et est compatible avec tous les navigateurs supportant les normes ECMAScript 5 (Chrome, Firefox, IE9 et +, Safari, Opera...). Il n'expose qu'une seule variable globale (Model, personnalisable) et une version UMD est disponible si vous utilisez RequireJS, browserify ou tout autre gestionnaires de modules.

Concernant le fonctionnement technique, ce sont les getter/setters ES5 qui sont mis à profit ainsi que les Proxies ES6 lorsqu'ils sont supportés. Plus de détails sont exposés ici.

Je viens de publier la version 0.9 qui sera probablement la dernière version avant la release 1.0. Toutes les fonctionnalités sont mises en place, l'API ne doit en principe plus bouger, et le tout est testé unitairement et benchmarké. Je cherche à présent des testeurs pour mettre à l'épreuve cette bibliothèque et recueillir votre feedback.

Merci d'avance donc aux intéressés de laisser leurs commentaires et suggestions, et de signaler les bugs rencontrés sur le Github du projet

Site officiel : http://objectmodel.js.org/
Github: https://github.com/sylvainpolletvill...rd/ObjectModel
Vous avez lu gratuitement 1 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Beginner.
Membre expert https://www.developpez.com
Le 07/04/2016 à 19:52
Salut,

Étant débutant je ne peux tester ni donner un avis mais on sent qu'il y a dû y avoir un gros boulot d’achevé...

PS : C'est hors sujet mais je trouve que le site est top.
1  0 
Avatar de Gnuum
Membre expérimenté https://www.developpez.com
Le 04/04/2016 à 14:47
Intéressant! Et de 70!
0  0 
Avatar de Gugelhupf
Modérateur https://www.developpez.com
Le 07/04/2016 à 11:05
Bonjour, Object:Model ressemble beaucoup au proposal StructType d'ES7. Je n'ai pas testé mais on dirait que les erreurs sont découverts au runtime et non au compile-time. Quels sont les avantages de ce framework par rapport à TypeScript ?
0  0 
Avatar de SylvainPV
Rédacteur/Modérateur https://www.developpez.com
Le 07/04/2016 à 11:22
Salut,

Effectivement, la grosse différence est qu'Object Model fait du typage dynamique, tandis que TypeScript valide à la compilation. J'ai expliqué la différence et l'intérêt qu'on y trouve dans le post initial de présentation d'Object Model sur ce topic.

Pour les StructType ES7, c'est une proposition assez ancienne dont le statut n'a pas beaucoup évolué depuis, donc j'ignore où ça en est. Je note toutefois comme principales différences avec Object Model:
- pas de typage imbriqué (définition de modèles objet sur plusieurs niveaux)
- pas de détection de changement ni de validation dynamique (a priori)
- pas d'assertions
- pas de composition possible (sauf si StructType hérite de Type, mais ce n'est pas indiqué dans la spec)
0  0