modélisation poo avec sgbd

dumth
Invité n'ayant pas de compte PHPfrance

18 déc. 2006, 11:03

Bonjour,

Est ce que vous structurer vos classes en fonction de votre MCD ?

c'est à dire une classe par table.
et dans ce cas, comment gérer vous les requêtes qui interrogent plusieurs tables ?

ou si vous structurer votre code autrement, comment ?

merci,

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

18 déc. 2006, 13:11

Une méthode par cas d'utilisation
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Petit nouveau ! | 1 Messages

19 déc. 2006, 00:53

Pas tout à fait (voire pas du tout).

Un modèle de données fait apparaître des entités et entre ces entités des relations.

Un modèle de classes fait apparaître des interfaces, des classes abstraites et concrètes, entre ces classes des implémentations, des héritages, des compositions...

Le modèle de classes n'est pas une simple transposition du modèle de données même si c'est fréquent. Dans ce dernier cas, ce qu'on appelle le "mapping objet-relationnel" ne pose pas vraiment de problème alors que ce fameux mapping est bien une des difficultés de la C-P/OO quand on fait de la programmation à objets et non à entités si j'ose dire.

Pour ce qui est de "gérer [vous] les requêtes qui interrogent plusieurs tables", mere-teresa donne une partie de la réponse à ta question. Tu aurais dans tes classes "DAO" des méthodes du genre getOrderByID($id)*, getOrdersByCustomer($customer) etc avec dans le premier cas une méthode qui retournerait un objet de type Order (dont l'identifiant est celui spécifié) et dans le second cas un tableau d'objets de type Order (qui sont les commandes du client spécifié).

* cette méthode - assez fréquente - n'est pas vraiment objet car elle fait apparaître l' "identifiant relationnel" (la clef primaire) dans la signature, quelque chose de plus orienté objet ressemblerait à getOrder($prototype)$prototype serait un objet "critère" de type Order dont seul le champ $id serait renseigné et encore ça se discute :? !

C'est une introduction très succincte mais tu soulèves de très nombreux problèmes en peu de phrases.

Beaucoup de ressources en anglais sur le mapping O/R mais je propose cette lecture en français :
http://www.dotnetguru.org/articles/Pers ... apping.htm
Il y a des frameworks de persistance en PHP (aucune expérience dans ce domaine en PHP) :
http://www.nexen.net/actualites/php/php ... _objet.php

Petit nouveau ! | 1 Messages

19 déc. 2006, 15:49

Merci de vos réponses, je commence à y voir un peu plus clair.

mais j'ai vraiment du mal à désolidariser le MCD (MPD) du modèle de classe.

J'ai lu aussi un post ici :
http://www.developpez.net/forums/archiv ... -5600.html


Ce qui m'étonne, c'est que beaucoup reconnaissent l'interêt de coder en objet, mais on ne trouve aucun exemple d'application (même petit)
alors que les codes sources de telle ou telle fonctionnalité foisonnent sur le net.

ca aiderait à y voir encore un peu plus clair.

bien sur, il y a les middleware, mais je les trouve surdimensionnés pour gérer de petites applications et puis pas facile à prendre en main (presque toutes en anglais, et les exemples manquent encore).

la, j'avais dans l'idée de faire une classe d'accès aux données regroupant toutes les fonctions SQL, que toutes les autres classes hériteraient.

suis-je dans la bonne voie ?

et où trouver des exemples concrets de structure d'applications ?

voici un cas d'exemple tel que je "l'imagine" pour l'instant :

http://www.flickr.com/photos/98463447@ ... 28112446/

a+