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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Object Model : du typage dynamique fort en JavaScript


Sujet :

JavaScript

  1. #1
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut Object Model : du typage dynamique fort en JavaScript

    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/sylvainpolletvillard/ObjectModel
    One Web to rule them all

  2. #2
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut Object Model 1.0 : première révision stable
    Object Model 1.0 : première révision stable
    Pour la bibliothèque JavaScript à typage dynamique fort


    Object Model est 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 source de nombreux bugs dans les applications JavaScript.

    La version 1.0, première révision stable de la bibliothèque JavaScript, vient d'être publiée.

    Pour s'assurer de sa stabilité, plus d'une centaine de tests ont été effectués sur tous les principaux navigateurs : Chrome, Firefox, Internet Explorer 9/10/11, Opera 20, Safari 5.1 et même la version preview de Microsoft Edge alias Project Spartan. Vous pouvez donc l'utiliser en toute sérénité, et profiter du typage fort pour gagner en confiance sur vos futurs projets JavaScript.

    Cette version introduit également les méthodes validate et test pour vous permettre d'interagir de manière plus fine avec le mécanisme de validation. De plus, les conventions de nommage utilisées pour les variables privées et les constantes sont désormais optionnelles et personnalisables (bien que par respect des conventions, je vous recommande de garder celles par défaut).

    La nouvelle documentation et le lien de téléchargement sont disponibles sur le site officiel : http://objectmodel.js.org/
    One Web to rule them all

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2015
    Messages : 7
    Points : 18
    Points
    18
    Par défaut
    Pour ce qui est de ObjectModel, je suis un peu sceptique. Je ne vois pas l'avantage de cette librairie face à typescript par exemple. La résolution des types à la compilation permet de couvrir les principales erreurs de typages. Mettre une couche supplémentaire aux js pour checker les types risque de faire beaucoup baiser les performances. De plus, nous n'auront pas les avantages qu’apporte un préprocesseur comme typescript en terme d'intellisense.
    Ceux-ci dit, cela peux apporter un plus pour certains développement, surtout au niveau des testes...Est ce que c’est possible de désactiver les proxy qui valident les données, une fois les testes effectués ?

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Les commentaires précédents ont été déplacés vers cette nouvelle discussion : http://www.developpez.net/forums/d15...ol-javascript/

    Merci de parler de ObjectModel sur le topic de ObjectModel

    @Kimojasan: le postulat de départ pour utiliser cette librairie est que l'on juge les solutions de typage statique insuffisantes. Comme expliqué en introduction du site de la bibliothèque, je me suis aperçu que les erreurs de type les plus courantes dans nos projets venaient de sources non prédictibles, en particulier les Web services. Statiquement, nos EDI JavaScript nous indiquent déjà quelques erreurs de typage statique, surtout lorsqu'on accompagne le code d'une JSDoc. Bien sûr, si tu n'as pas fait le même constat et si tu estimes ne pas avoir besoin de typage dynamique, cette bibliothèque n'est pas pour toi.

    Concernant le fait de pouvoir désactiver les proxies de validation, j'y avais pensé mais la phase de validation peut influer la logique du code, ainsi que d'autres fonctionnalités spécifiques comme le parcours null-safe ou les assertions. Je ne peux pas garantir que les gens ont un usage totalement transparent de la bibliothèque, mais si c'est le cas, ils peuvent assez facilement remplacer en environnement de production le namespace Model et les modèles associés par un mock-up ne faisant aucune validation.
    One Web to rule them all

  5. #5
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut Object Model 2.0 : nouvelle version majeure pour la solution de typage fort dynamique
    Object Model 2.0 : nouvelle version majeure
    pour la solution de typage fort dynamique

    Nom : logo.png
Affichages : 4913
Taille : 10,1 Ko

    La bibliothèque de typage fort dynamique continue son bout de chemin et sort aujourd'hui en version 2.0.

    Grâce aux excellents retours des utilisateurs sur Github, plusieurs évolutions majeures ont été introduites :

    • les erreurs sont accumulées avant d'être renvoyées. En v1, la validation s'arrêtait dès la première erreur rencontrée ;
    • ajout de collecteurs d'erreurs personnalisés, permettant de définir vos propres comportements en cas d'erreur ;
    • ajout de null comme valeur valide pour les propriétés optionnelles ;
    • ajout d'une description optionnelle pour les assertions.


    À partir de cette v2, le support IE9 et IE10 a été retiré. Supporter ces navigateurs se traduisait par de nombreux hacks et correctifs qui pénalisaient les autres navigateurs. Cela se traduit par une bibliothèque plus légère (6.8 Ko, 2.8 Ko en gzippé) et plus performante malgré les ajouts de nouvelles fonctionnalités.

    Les futures évolutions seront centrées sur les gains de performance offerts par les Proxy ES6. Votre feedback sera également déterminant, comme il l'a été pour les changements introduits dans cette v2.

    Pour en savoir plus : http://objectmodel.js.org/

    Et vous ?

    Qu'en pensez-vous ?
    One Web to rule them all

  6. #6
    Membre expérimenté
    Avatar de Gnuum
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2007
    Messages : 215
    Points : 1 715
    Points
    1 715
    Billets dans le blog
    1
    Par défaut
    Intéressant! Et de 70!
    {gnu: ["um", "cki"]}

  7. #7
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    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 ?
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  8. #8
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    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)
    One Web to rule them all

  9. #9
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    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.

Discussions similaires

  1. Réponses: 10
    Dernier message: 22/03/2007, 08h36
  2. id et typage dynamique
    Par Omfraax dans le forum Développement OS X
    Réponses: 5
    Dernier message: 23/08/2006, 19h13
  3. Comment gérer les objects déclarer en HTML dans un script JAVASCRIPT?
    Par Thauglor dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/04/2006, 14h54
  4. [Débat] Que pensez-vous des langages à typage dynamique?
    Par Eusebius dans le forum Langages de programmation
    Réponses: 14
    Dernier message: 16/06/2004, 12h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo