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

XML/XSL et SOAP Discussion :

Quelle approche pour ce problème de conception bien spécifique ?


Sujet :

XML/XSL et SOAP

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Août 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Quelle approche pour ce problème de conception bien spécifique ?
    Bonjour,
    je me permets de m'adresser a vous afin de recueillir votre avis sur ce problème de conception tres spécifique :
    Je dois concevoir un module qui sera développé en C++ pour des raisons de performances. Ce module est en charge de parser des fichiers avec un format très précis :
    les 64 pemiers bits du fichiers indiquent quels sont les objets qui seront présents à la suite de ceux-ci. Concrètement, si le bit 12 et le bit 49 sont à 1 et tous les autres à 0, ces 64 premiers bits seront suivis seront suivis directement d'un objet de type 12 puis d'un objet de type 49.
    Chacun de ces objets (64 au total) possède son propre format et sa propre taille.
    Il est donc évitent que je vais devoir créer 64 classes différentes pour ces 64 objets afin de les parser et de recueuillir leurs infos. Cependant je voudrais réaliser ceci de la manière la plus propre possible.
    La première apporche consiste à parcourir tous les bits et, dans un immense if d'instantier l'objet correspondant ou pas suivant si le bit est à 1 ou pas. Cependant, si le langage cible etait Java, je pourrais me contenter d'utiliser la reflection pour instantier mes objets dans une grande boucle.
    Ma question est la suivante : y a-t-il un moyen d'éviter cet énorme test de 64 else if pour instantier mes objets sachant que le langage cible est C++ ??

    Merci d'avance pour votre aide
    WokMichel

  2. #2
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Pourquoi ne pas utiliser un objet gérant les structures XML et faire simplement le décodage et l'encodage en binaire.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Août 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Salut Graffito, merci pour ta réponse, mais je ne comprends pas bien l'approche que tu me proposes.
    D'ailleurs, je n'ai que besoin de décoder ces fichiers, pas d'en génerer.

    J'en suis pour l'instant a la phase de conception de l'application et cherche a architecturer celle ci de manière optimale.

    Encore merci.
    A+

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Je retire donc "et l'encodage".

    L'idée consiste à utiliser un objet unique qui est une structure arborescente pour mettre l'ensemble des données. Il existe des bibliothéques de ce type pour des structures de données XML (on pourrait aussi utiliser l'ASN1).

    Le premier niveau de la description après la racine commune consisterait en un choix entre les différents types de messages.

    La démarche consiste à créer le schéma XML (ou les defs ASN1)correspondant aux données, puis à faitre passer ce schéma dans un générateur de code qui crée les objests/structures de données avec les noms définis dans le scéma et toutes les fonctions de manipulation.

    Exemple d'outil ASN1 : SNACC
    Exemple d'outil XML : http://lists.w3.org/Archives/Public/...6May/0012.html
    Pour plus de détails sur les outils XML, aller sur le forum WML ou C++.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Août 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Le problème est que ces différents champs sont de longueur variable et on ne sait pas à l'avance quelle va être leur taille sans avoir parsé le champ précédent. Est ce applicable ici ?

  6. #6
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    ces différents champs sont de longueur variable et on ne sait pas à l'avance quelle va être leur taille sans avoir parsé le champ précédent. Est ce applicable ici ?
    Tout à fait, que ce soit XML ou ASN1, on peut définir tableaux de tailles fixe ou variable, Choix, éléments optionels, ...

    Voici un exemple en ASN1 (définitions plus lisibles que XML, mais mêmes principes) :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    Order ::= SEQUENCE {
      header  Order-header,
      items   SEQUENCE OF Order-line}
     
    Order-header ::= SEQUENCE {
      number   Order-number,
      date     Date,
      client   Client,
      payment  Payment-method }
     
    Order-number ::= NumericString (SIZE (12))
     
    Date ::= NumericString (SIZE (8)) -- MMDDYYYY
     
    Client ::= SEQUENCE {
      name     PrintableString (SIZE (1..20)),
      street   PrintableString (SIZE (1..50)) OPTIONAL,
      postcode NumericString (SIZE (5)),
      town     PrintableString (SIZE (1..20)) }
     
    Payment-method ::= CHOICE {
      check        NumericString (SIZE (15)),
      credit-card  Credit-card,
      cash         NULL }
     
    Credit-card ::= SEQUENCE {
      type         Card-type,
      number       NumericString (SIZE (20)),
      expiry-date  NumericString (SIZE (6)) -- MMYYYY -- }
     
    Card-type ::= ENUMERATED { cb(0), visa(1), eurocard(2),
                     diners(3), american-express(4) }
     
    Order-line ::= SEQUENCE {
      item-code    Item-code,
      label        Label,
      quantity     Quantity,
      price        Cents }
     
    Item-code ::= NumericString (SIZE (7))
     
    Label ::= PrintableString (SIZE (1..30))
     
    Quantity ::= CHOICE { unites       INTEGER,
                          millimetres  INTEGER,
                          milligrammes INTEGER }
     
    Cents ::= INTEGER
     
    Delivery-report ::= SEQUENCE {
      order-code   Order-number,
      delivery     SEQUENCE OF Delivery-line }
     
    Delivery-line ::= SEQUENCE { item  Item-code,
                          quantity Quantity }
     
    PDU ::= CHOICE { question CHOICE { 
                       question1 Order,
                       question2 Item-code,
                       question3 Order-number},
                     answer  CHOICE {
                       answer1   Delivery-report,
                       answer2   Quantity,
                       answer3   Delivery-report }}

Discussions similaires

  1. Quelle approche pour un quiz ? (XML ou BDD)
    Par bigwade dans le forum Android
    Réponses: 11
    Dernier message: 21/11/2012, 17h27
  2. [Google Maps] Quelle approche pour développer une application google maps (JS/PHP/MySQL)
    Par ggive dans le forum APIs Google
    Réponses: 0
    Dernier message: 23/11/2011, 15h17
  3. Réponses: 6
    Dernier message: 26/04/2007, 12h57
  4. Problème de conception pour un Stack
    Par gelam dans le forum Langage
    Réponses: 4
    Dernier message: 14/11/2006, 16h47
  5. [VB.Net] Quelle documentation pour bien débuter ?
    Par reeda dans le forum Débuter
    Réponses: 3
    Dernier message: 29/08/2006, 19h06

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