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 :

Module patterns, objets et namespace : différences ?


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 19
    Points : 19
    Points
    19
    Par défaut Module patterns, objets et namespace : différences ?
    Bonjour à tous,

    J'ai lu pas mal de tutoriels JS ces derniers temps concernant les module patterns, la programmation objet, les objets littéraux et les namespaces et au final j'ai dû mal à cerner les différences ou plutôt dans quels contextes une solution est a préférer sur une autre.

    Si je pose la question c'est parce que j'ai l'impression que toutes ces solutions font la même chose, la forme change, certaines utilisent des IIFE, d'autres permettent de rendre privées certaines variables/méthodes, mais à l'arrivée le résultat est le même: un objet avec des variables et des méthodes, avec ou sans "this".

    Dans un tuto je trouve des explications sur l'utilisation des objets littéraux pour encapsuler son code, et dans un autre on appelle ça des namespaces faisant au final exactement la même chose. Pareil pour les module patterns qui apparemment ne font qu'instancier automatiquement un objet JS au moment du chargement du script et le retourner dans une variable, au final quelle est la véritable différence?

    Ma question est sincère, je découvre ces approches et je ne suis pas dans le débat ou la polémique, je cherche juste à bien cerner les subtilités du langage

    Merci d'avance pour vos éclaircissements.

  2. #2
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Les éléments de langage de JS sont très versatiles, c'est pourquoi on les retrouve dans de nombreux patterns, et ça a de quoi embrouiller. Ce qui compte c'est l'intention. Dans les ressources de bonne qualité, l'auteur du code explique clairement son intention, la signification qu'il donne à tel ou tel élément de son code, dans les commentaires ou dans une documentation à côté.

    Si le code n'est pas ou peu documenté, on en arrive au plus important pour toi : l'expérience. Plus tu expérimentes avec le langage et te « cultives » sur les différentes pratiques en JS, et plus tu auras une bonne compréhension et une bonne intuition. Lis moins, écris plus (de code) ; c'est le seul conseil que je peux te donner
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    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
    En fait tous ces mots désignent grosso-modo la même chose. Le concept objet JavaScript est très simple mais peut être utilisé à des fins différentes dans des situations différentes, c'est pour ça qu'on décline ça en autant de mots.

    Quand on parle d'objets "littéraux", ce sont des objets comme les autres, c'est juste qu'ils sont déclarés avec l'écriture littérale ( {} pour les objets, [] pour les listes ). C'est ce qu'on utilise la plupart du temps.

    Pareil pour les namespaces, ce sont des objets comme les autres. Là on essaie plus de décrire la finalité. Par exemple si tu fais une bibliothèque avec dix super fonctions, plutôt que de déclarer et exposer 10 variables, tu peux vouloir les mettre dans un objet MaSuperLib qui sera le seul exposé à l'utilisateur. Auquel cas MaSuperLib est ton namespace et n'a pas d'autre intérêt que celui de "conteneur".

    Les modules quant à eux sont comme des namespaces mais avec quelques règles en plus pour être "modulaire": c'est-à-dire qu'on déclare un module par fichier et qu'on met généralement tout le code du module à l'intérieur d'une IIFE pour "isoler" du reste. Il y a beaucoup de patterns de modules différents associés à un outillage différent: AMD, CommonJS, UMD... et maintenant avec la dernière norme ECMAScript 6, JavaScript a son propre système de modules: http://www.2ality.com/2014/09/es6-modules-final.html

    Il est conseillé d'avoir un code modulaire, donc décomposé en modules qui sont très souvent des objets littéraux jouant le rôle de namespace. J'espère que c'est plus clair
    One Web to rule them all

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2014
    Messages : 19
    Points : 19
    Points
    19
    Par défaut
    Ok, ça confirme mes premières impressions donc, c'est une question de pratique et de bonnes pratiques pour vraiment faire le bon choix selon son projet mais grosso modo mis à part la syntaxe ça reste assez similaire

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence entre pattern closure module et prototype
    Par jibe84 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/10/2013, 09h55
  2. Pattern objet RegExp
    Par Loki13 dans le forum ASP
    Réponses: 1
    Dernier message: 01/08/2009, 18h42
  3. Module SFSTD, objet STD_OG_MIGR introuvables
    Par eungaro dans le forum Designer
    Réponses: 1
    Dernier message: 28/08/2007, 16h43
  4. Différence, exemple procédural, événementiel, objet ?
    Par ludophil dans le forum Débuter
    Réponses: 3
    Dernier message: 26/10/2005, 08h35
  5. Réponses: 2
    Dernier message: 01/05/2005, 14h43

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