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 :

Gérer ses données Javascript


Sujet :

JavaScript

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut Gérer ses données Javascript
    Bonjour à tous,

    Je possède une application Web qui consomme pas mal de données côté client, donc en JavaScript.

    Les données sont issues d'une bases de données, elles transitent par du PHP qui les renvoie en JSon pour atterrir dans des structures JavaScript.

    Au final, ça arrive dans ce type de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    function Client() {
       this.m_lId = -1;
       this.m_strFirstName = "";
       this.m_strLastName = "";
    }
    Client.prototype = {
       getId: function() {
          return this.m_lId;
       },
       getFirstName: function() {
          return this.m_strFirstName ;
       },
       getLastName: function() {
          return this.m_strLastName ;
       },
    }
     
    function Contrat() {
       this.m_lId = -1;
       this.m_lClientId = -1;
       this.m_iType = -1;
       this.m_strProduct = "";
    }
    Contrat.prototype = {
       getId: function() {
          return this.m_lId;
       },
       getClientId: function() {
          return this.m_lClientId;
       },
       getType: function() {
          return this.m_iType ;
       },
       getProduct: function() {
          return this.m_strProduct ;
       },
    }
    Et il y a un mapping pour intégrer une réponse JSon dans ces types JavaScript afin de découpler le nommage PHP de celui de JavaScript.

    Tout ça fonctionne très bien aujourd'hui, mais étant débutant j'aimerais savoir si c'est comme ça, en général, qu'il faille procéder où s'il y avait une bibliothèque pour gérer ce genre de besoin plutôt basique.

    En revanche, ce qui m'intéresse davantage, c'est l'accession aux données, par exemple pour retrouver les contrats d'un client je rajouter dans le prototype de Client cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    getContracts: function() {
       var ret = [];
       for(var c in g_contracts)
          if(g_contracts[c].getClientId() == this.m_lId)
             ret.push(g_contracts[c]);
       return ret;
    }
    Je trouve ce code très moche pour un besoin aussi courant, et ici ce n'est qu'un exemple mais lorsque la structure s'alourdit, la complexité algorithme est exponentielle et les performances en pâtissent. De plus, la taille de ce genre de code alourdit grandement le fichier JS et donc le temps de chargement de la page.

    Alors je me dis qu'en 2015 il doit y avoir des outils / une technique, pour mieux gérer ses données, de manière plus rapide et plus propre que ça, ou pas..

    Pourriez-vous me dire les bons usages et coutumes à employer lorsque l'on se retrouve dans ce cas là en JavaScript ?

    Merci par avance,

    A bientôt

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

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Pour moi ça ne dépend pas du langage, mais je pense que tu devrais inscrire le contrat sur l'objet client associé au moment où tu construis le contrat. Autrement dit, créer des liens réciproques. Ainsi ta structure de données sera toujours cohérente.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Citation Envoyé par mister3957 Voir le message
    ...
    Je trouve ce code très moche pour un besoin aussi courant, et ici ce n'est qu'un exemple mais lorsque la structure s'alourdit, la complexité algorithme est exponentielle et les performances en pâtissent.
    ...
    Merci par avance,

    A bientôt
    Tous les designs patterns que tu connais dans d'autres langage peuvent être implémenté en javascript

    La question en ce qui concerne les lib c'est que cherches tu exactement car il y a tant d'approche pour géré ce genre de pb qu'il n'est pas possible de lister toutes les implémentation possible de ces approches.

    De plus si les librairies se concentrent sur une problématique (ici l'accès au données) les frameworks eux propose une approche globale et couvre (ou tente de couvrir) tous les aspect du dev d'une application.

    Sencha par exemple propose un framwork qui prend en charge l'accès au données mais aussi la modélisation, la connexion à diverses sources, le tri local distant, le filtrage local distant, la pagination ,l'affichage l'édition de données
    mais aussi tous le reste de l'appli controlleur view etc.
    http://www.sencha.com/blog/deep-dive...ext-js-5-data/


    Je ne connais pas de lib qui prenne en compte spécifiquement ce problème.
    le problème dans ce cas c'est que généralement on utilise d'autres libs pour la manipulation du DOM pour Ajax pour l'affichage de composants complexe. du coup il faut trouver la lib qui va être compatible avec toutes les lib qu'on utilise.

    A+JYT

  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
    Par défaut
    Il faudrait préciser exactement quel besoin tu as, j'ai l'impression que ta solution fonctionne déjà bien. Pour l'accès aux données, une fonction comme celle que tu as proposé fait très bien l'affaire (tu peux utiliser array.filter plutôt qu'un for/push). On ne perd quasiment rien en performances, si c'est le cas ça veut dire que tu charges trop de données côté client ou alors qu'il y a une énormité dans une de tes fonctions.

    Si tu as l'impression que le code est inutilement compliqué, peut-être est-ce ton modèle JSON qui est mal conçu. Par exemple si tu as souvent besoin d'accéder aux contrats d'un client par l'ID client, peut-être qu'un objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var contrats = { monClient1: 
    [liste contrats], monClient2: 
    [liste contrats] };
    est plus approprié qu'une liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var contrats = [ { idClient: "monClient1", ... }, { idClient: "monClient2", ... } ]
    Il n'y a pas vraiment de bibliothèque pour aider à la gestion des données, c'est plus une question d'organisation et de conception. On trouve en revanche des bibliothèques JS pour la validation de données, le cryptage, la surveillance ou le stockage persistent côté client. A voir si cela fait partie de tes besoins.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Ok, merci pour vos réponses,

    C'était juste pour savoir s'il y avait une bibliothèques quelque part pour faire quelque chose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    contrats[] = find_array(g_contract, client, m_lId, m_ClientId)
    Et ce à plusieurs niveaux (structures intermédiaires). En gros des requêtes sur les données avec la possibilité de jointure.

    Sinon je peux le faire, c'est juste que s'il y avait une bibliothèque pour ça, testée, validée et approuvée, ça m'aurait arrangé

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

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Si une lib fait ça, elle utilise forcément un for/push, un array.filter ou autre technique similaire en interne. Elle ne te fera pas gagner en performances.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Non mais peut-être en temps de développement, en clarté de code et en confiance, étant donné que ce n'est pas ma meilleure tasse de thé, j'aurais plus préféré faire confiance à quelque chose bien en place qu'à mes gros doigts boudinés

    Il y a des bibliothèques pour gérer les appels asynchrones, les manipulation du DOM etc. donc la question de la manipulation d'une structure de données s'était légitimement laissé posée

    Dans le cas ultra simple présenté dans ce sujet, c'est pas une montagne, en revanche on pourrait vouloir utiliser des recherches à base d'expressions régulières, des systèmes de cohérence (interdit d'avoir un contrat dont le client n'est pas référencé), donc interdit de retirer un client des données sans avoir au préalable viré les contrats correspondants.

    Je vais donc prévoir ce genre de fonctionnalité, mais dommage qu'une lib ne le propose pas, ça paraît tellement courant..

    En tout cas merci beaucoup à vous

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Non je n'ai pas regardé Sencha, juste noté

    Je vais checker ça ce soir ou demain matin.

    Merci à toi

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

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Vous êtes rapides aujourd'hui tous !

    J'ai supprimé mon dernier post car en fait c'était un bêtise. J'avais mal lu le post de Sekai, il disait en réalité que, selon lui, il n'y a pas de lib pour ton besoin précis. Mais ça vaut le coup de regarder quand même

    Je vais rajouter que, vu que ça peut se faire en 3 lignes de code (par exemple avec un array.filter), peut-être que le besoin d'écrire une lib pour ça ne s'est jamais fait ressentir. Avant toi en tout cas
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  10. #10
    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
    Par défaut
    +1 avec Watlin. Pour ce genre de choses, les fonctions filter / every / some / find / findIndex du prototype Array sont là pour ça et font très bien le travail. Une bibliothèque n'apporterait pas grand chose. On peut quand même citer underscore.js et son pendant lodash, qui ont beaucoup de fonctions utilitaires qui pourraient peut-être s'avérer utile pour toi.

    http://underscorejs.org/
    https://lodash.com/

  11. #11
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 415
    Par défaut
    Salut,

    Oui d'autant plus que tu dis que ton application consomme pas mal de ressources en javascript. Alors charger une lib pour des opérations simples te ferait une couche consommatrice de ressources inutiles en plus... Quand on charge une lib faut que cela en vaille un minimum la peine et rien ne le justifie dans les exemples que tu nous montre

Discussions similaires

  1. Réponses: 0
    Dernier message: 06/09/2010, 20h18
  2. Récupérer ses données après formatage
    Par Sékiltoyai dans le forum Composants
    Réponses: 7
    Dernier message: 21/04/2007, 18h01
  3. [Persistance]Gérer des données
    Par Battosaiii dans le forum JDBC
    Réponses: 5
    Dernier message: 10/12/2005, 20h38
  4. Réponses: 12
    Dernier message: 11/04/2005, 18h31

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