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

PHP & Base de données Discussion :

Bonne pratique formation et transfert d'objet?


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4
    Par défaut Bonne pratique formation et transfert d'objet?
    Bonjour,
    Je débute en PHP et en POO et je me pose 2 questions, je ne sais pas si je fais les choses correctement.

    Contexte :
    Entreprise faisant du transport et de la distribution.
    Application servant à établir les commandes clients en fonction de :
    - adresse d’enlèvement.
    - adresse de livraison.
    - marchandises.

    Question 1 :
    Voici un schéma de base de données.

    http://imageshack.us/f/836/14be.png/

    Si je souhaite afficher la liste des commandes d’un client, j’affiche un tableau contenant des objets commande et je dois hydrater mes objets métiers avec les données de la db.

    Je me retrouve donc avec :
    Pour l’objet Commande : commande + client
    Pour l’objet Enlevement : enlevement + commande + client
    + adresse + client
    Pour l’objet Livraison : livraison + commande + client
    + adresse + client
    Pour l’objet Marchandise : marchandise + commande + client
    Pour l’objet Document : document + commande + client

    Soit 5 objets commande identiques et 7 objets client identique.
    La question que je me pose, est-ce que je dois reformer des objets complets et me retrouver avec des doublons ou pour les « sous objets » ne reprendre que l’id par exemple ?

    Question 2 :
    J’ai une liste de commande avec en fin de ligne un bouton update pour mettre à jour la commande.
    Je clique sur ce bouton qui m’envoi sur une page formulaire déjà remplit avec les données de la commande que je souhaite modifier.
    Comment j’envoie cet objet sur cette nouvelle page formulaire ?
    Soit l’objet commande complet via $_SESSION.
    Soit l’id de la commande via $_GET et je reforme cet objet en faisant une requête avec l’id.
    Quelle est la meilleure solution ?


    Merci de m’éclaircir sur ces 2 points.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Je te suggère de prendre un titre plus explicite la prochaine fois car formation et transfert d'objet n'a pas beaucoup de relation avec le sujet.

    Pour la question 1, il faut partir d'un objet client (puisque chaque tableau correspond à un seul client), puis utiliser les clés étrangères pour récupérer les autres objets en rapport avec ce client. J'ai peut-être mal compris le problème, mais en partant d'un seul objet client, tu n'auras pas de doublon, tous les autres objets se serviront d'une référence à cet objet.
    Pareil pour les autres objets.

    Si j'ai mal compris et que tu risques vraiment de te retrouver avec des doublons, tu peux utiliser le pattern Identity Map pour la vérification. pour résumer de façon (très) simple, tu fais un tableau avec l'id en clé et l'objet en valeur, et avant chaque requête, tu vérifies la présence de l'id dans le tableau et si c'est le cas, tu retournes l'objet. Dans ce cas, effectivement, tu peux ne récupérer que les id au début, puis refaire une autre requête pour charger uniquement les objets manquants. Mais encore une fois, je ne pense pas que ce soit nécessaire.

    Pour la question 2, sérialise l'objet en session.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4
    Par défaut
    Pour la question 1, il faut partir d'un objet client (puisque chaque tableau correspond à un seul client), puis utiliser les clés étrangères pour récupérer les autres objets en rapport avec ce client. J'ai peut-être mal compris le problème, mais en partant d'un seul objet client, tu n'auras pas de doublon, tous les autres objets se serviront d'une référence à cet objet.
    Pareil pour les autres objets.
    Dans le cas de mon objet Commande, j’ai l’id client en clé étrangère donc pour reformer l’objet Commande complet, je suis censé me retrouver avec un objet tel que celui-ci :

    Commande Object
    (
    [comId:Commande:private] => 32
    [comDate:Commande:private] => 2013-09-06 00:00:00
    [comPoids:Commande:private] => 0
    [comStatut:Commande:private] => 1
    [client:Commande:private] => Client Object
    (
    [cliId:Client:private] => 1
    [cliTVA:Client:private] => n°00001
    [cliSociete:Client:private] => Client 1
    [cliAdresse:Client:private] => Rue r1 ,1
    [cliAdresse2:Client:private] => 711 Ville1
    [cliTelephone:Client:private] => 064/00001
    [cliMail:Client:private] => M1@mail.fr
    [cliContact:Client:private] => Mr Pers1
    )

    )

    Et si je veux également les données d’enlèvement liées à cette commande, je me retrouver avec :

    Enlevement Object
    (
    [enlId:Enlevement:private] => 24
    [enlDate:Enlevement:private] => 0000-00-00
    [enlReference:Enlevement:private] =>
    [enlReferenceBis:Enlevement:private] =>
    [enlRemarque:Enlevement:private] =>
    [enlPriseEnCharge:Enlevement:private] =>
    [commande:Enlevement:private] => Commande Object
    (
    [comId:Commande:private] => 32
    [comDate:Commande:private] => 2013-09-06 00:00:00
    [comPoids:Commande:private] => 0
    [comStatut:Commande:private] => 1
    [client:Commande:private] => Client Object
    (
    [cliId:Client:private] => 1
    [cliTVA:Client:private] => n°00001
    [cliSociete:Client:private] => Client 1
    [cliAdresse:Client:private] => Rue r1 ,1
    [cliAdresse2:Client:private] => 711 Ville1
    [cliTelephone:Client:private] => 064/00001
    [cliMail:Client:private] => M1@mail.fr
    [cliContact:Client:private] => Mr Pers1
    )

    )

    [adresse:Enlevement:private] => Adresse Object
    (
    [adrId:Adresse:private] => 93
    [adrSociete:Adresse:private] => a
    [adrRue:Adresse:private] => a
    [adrNo:Adresse:private] => a
    [adrBoite:Adresse:private] => a
    [adrCode:Adresse:private] => a
    [adrVille:Adresse:private] => a
    [adrCamHayon:Adresse:private] => 0
    [adrCamQuai:Adresse:private] => 0
    [adrCamSemi:Adresse:private] =>
    [adrCamRemarque:Adresse:private] => a
    [adrContact:Adresse:private] => a
    [adrTelephone:Adresse:private] => a
    [adrFax:Adresse:private] => a
    [adrMail:Adresse:private] => a
    [adrContRemarque:Adresse:private] => a
    [pays:Adresse:private] => Pays Object
    (
    [paysIdays:private] => 9
    [paysNomays:private] => Antarctique

    [paysCodeays:private] => AQ
    )

    [client:Adresse:private] => Client Object
    (
    [cliId:Client:private] => 1
    [cliTVA:Client:private] => n°00001
    [cliSociete:Client:private] => Client 1
    [cliAdresse:Client:private] => Rue r1 ,1
    [cliAdresse2:Client:private] => 711 Ville1
    [cliTelephone:Client:private] => 064/00001
    [cliMail:Client:private] => M1@mail.fr
    [cliContact:Client:private] => Mr Pers1
    )

    )

    )
    Vu qu’Enlèvement à l’id commande en clé étrangère et Commande à l’id client en clé étrangère.
    Donc je n’ai pas d’autre choix que de me retrouver avec des doublons.
    Après intervient le pattern Identity Map pour réduire les requêtes en vérifiant si tel objet avec tel id a déjà été chargé.
    Mon raisonnement est bon ?

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Pas forcément, tout dépend comment tu charges les données et forme les objets. Le fait que ta commande contienne une instance de client ne signifie pas forcément que cette instance est réellement un objet séparé.

    Si tu ne peux pas dire d'après la partie de ton code qui récupère les données si c'est le cas, teste avec spl_object_hash pour déterminer si les objets sont réellement différents.

    En tous les cas, oui ton raisonnement est le bon.

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 03/09/2019, 01h02
  2. Réponses: 1
    Dernier message: 23/09/2010, 14h38
  3. Bonnes pratique : ne rien retourner ou retourner un objet ?
    Par harf18 dans le forum Général Java
    Réponses: 10
    Dernier message: 12/03/2010, 12h32
  4. [Article] Bonnes pratiques objet en .net : Introduction aux principes SOLID
    Par Philippe Vialatte dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 25/02/2009, 17h47
  5. Bonnes pratiques XML et formats pivot
    Par _Mac_ dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 17/12/2008, 15h46

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