|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Bonsoir à tous.
Je suis en train de réfléchir à une architecture objet me permettant de faire de la réflexion d'une base de données MySQL. L'idée est de pouvoir fournir aux couches métier et présentation un visuel sur l'état de la base de données tant en termes de structure que de données. Ne me demandez pas pourquoi, on dira simplement que je travaille dans un contexte ou je n'ai pas le contrôle sur les base de données avec lesquelles travaillent mon application. Actuellement, si on prends le cas d'école "produit", je dispose d'un modèle sous forme de classe Product, d'un métier ProductManager, d'un agrégateur Products, d'un contrôleur ProductsController et de plusieurs templates de vues (edit, list et view). Le problème est que (trop) souvent, d'autres développeurs dont les application adressent également les bases de données changent le schéma, ce qui à pour incidence de revisiter une bonne partie des classes sus-nommées. Là ou je souhaite arriver c'est fournir un composant capable de faire de la réflexion sur les tables, les vues, les procédures et les databases - c'est à dire d'en connaitre le schéma, les intrications entre les entités, les relations etc. La définition des besoins fait apparaître la nécessité de reproduire le mécanisme des Reflector de PHP 5. Ma question est alors la suivante: est-il envisageable d'écrire une série de classes qui réalisent l'interface Reflector ? ORM et Frameworks s'abstenir, je n'en veux pas.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
oui ça me semble faisable, y'a moyen de faire quelque chose de bien en plus
![]() par contre certaines info dépendent des SGBD et des droits dessus
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#3 | |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Je n'ai pas trouvé grand chose sur Google à ce sujet (je suis d'ailleurs tombé sur mon propre topic avec les mots clés "php database reflector"
Enfin ma question n'était pas tant de l'ordre de la faisabilité - en réalité, j'ai déjà quelques ébauches de classes service capable de renvoyer une structure de table, de générer des requêtes et d'extraire les valeurs par défaut d'une table, ça marche assez bien soit dit en passant - mais plutôt d'un ordre logique: est ce que le prendre comme ça, c'est à dire étendre le mécanisme de réflexion de PHP, est une bonne ou mauvaise approche. Le but avoué est la génération de vues et de formulaires "à la volée", les plus malins l'auront deviné, je travaille sur des back-offices écrits en PHP Citation:
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
Je trouve que c'est une bonne idée.
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#5 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Je constate que l'interface Reflector définit une méthode statique export. Dans le contexte de ReflectionClass, ça permet d'exporter la classe visiblement. Je ne comprends pas bien ce que cela signifie et comment l'implémenter dans mon cas.
Auriez-vous des idées là dessus ?
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
oui Reflector c'est pour le rendre en texte, mais rien n'empeche d'avoir les valeurs
ReflectionClass -> getMethods -> ReflectionMethod -> isPublic donc niveau table tu peux avoir par exemple ReflectionBase -> getTables -> ReflectionTable -> getEngine
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#7 | ||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Ok, j'ai attaqué par le début, la classe ReflectionBase:
Code :
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
||
|
00
|
|
|
#8 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
tu sais que avec PDO t'as FETCH_CLASS
donc tu pourrais faire par exemple : Code :
$stmt->fetchAll(PDO::FETCH_CLASS, 'ReflectionTable');
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#9 | |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Je sais mais
Citation:
En revanche, ça peut être utile pour le factory de ReflectionTable. A voir. Pendant que je suis là, tu as un article ou tutorial sur les catalogues en MySQL, je ne les utilise jamais mais bon, je vais sûrement devoir l'implémenter ici.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
|
00
|
|
|
#10 | ||||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Bon, j'ai bien avancé. J'ai créé les classes suivantes
- ReflectionBase - ReflectionTable - ReflectionView - ReflectionRoutine - ReflectionColumn Toutes réalisent l'interface Reflector et disposent d'une méthode __toString équivalente à celle de ReflectionClass par exemple. Voic un exemple: Code :
Code :
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
||||
|
00
|
|
|
#11 | |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Pour revenir à ce que tu disait,
Citation:
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
|
00
|
|
|
#12 | |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Citation:
Je ne les ferais pas toutes hériter de reflexionBase, je ne vois pas trop les propriétés et/ou méthodes communes. Par contre, je découperais reflexionBase en deux "étage" un reflexionBase et un reflexionBaseMaBase qui permettrait d'adapter facilement sur d'autre base de données. De plus je ne sais pas si tu n'aurais pas intérêt à gérer un objet reflexionConnction a part. Et si tu n'aurais pas intérêt à gérer un objet collection qui implémenterais arrayAccess et iteration qui serait rattaché à base pour inclure une collection des tables et à table pour une collection des colonnes. Et enfin, j'ai l'impression qu'il manque une notion d'objet enregistrement mais peut-être est-il mélangé a table ?
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
|
00
|
|
|
#13 | ||||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Salut Michael, merci pour ton post.
Si j'ai parlé d'héritage, c'est parce que toutes ces classes partagent: - le fait qu'elles réalisent Reflector - la signature de leur constructeur - les propriété $_pdo et $_meta_inf Mais je me demande si cette relation caractérise bien un "est un espèce de". Citation:
Je ne vois pas trop d'intérêt dans la classe reflectionBaseMaBase puisque new ReflectionBase('MaBase') est fait pour ça ReflectionBase porte par ailleurs une méthode statique getBases() capable renvoyer tous les schémas sous forme de tableau de ReflectionBase. Citation:
Citation:
Citation:
-- Edit Je crois comprendre ce que tu veux dire quand tu parle des objets enregistrement, tu veux dire des objets ReflectionRecord c'est ça ? Le problème est que ces classes de réflection ne portent que sur la structure des éléments du SGBD, les enregistrements sont gérés par une chouche supérieure (le DAO).
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
||||
|
00
|
|
|
#14 | ||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Qui peut le plus peut le moins.
Citation:
Citation:
Dans l'objet reflectionBase, pourquoi ne stockes tu pas ta liste des tables dans getTables() ? Ainsi, si la demande est faîte deux fois il n'y a qu'une requête SQL (la premières). Et tu peux récupérer ton objet table, pour la méthode getTable, directement dans le tableau, s'il existe et le générer le cas échéant. Par contre, j'ai peut-être une vision trop généraliste et pas suffisamment cas particulier. Désolé.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
||
|
00
|
|
|
#15 | |||||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Citation:
Mais comme je l'ai dit, on en es pas là. Citation:
Deux base, pour quoi faire ?? Un table n'appartient pas à plusieurs bases ni plus qu'une colonne n'appartiens à deux tables. Citation:
Citation:
Citation:
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|||||
|
00
|
|
|
#16 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Hello
Bon j'ai pas abandonné le thread hein ! Vous trouverez dans la pj du post les classes dans leur état de délabrement actuel. Faisez des test et dites-moi ce que vous en pensez.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
Copyright © 2000-2012 - www.developpez.com