begin process at 2012 05 27 19:39:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > COUCHE D'ABSTRACTION DE LA BASE DE DONNÉES ET GESTION ORIENTÉ OBJET DES ACCÈS AUX TABLES

COUCHE D'ABSTRACTION DE LA BASE DE DONNÉES ET GESTION ORIENTÉ OBJET DES ACCÈS AUX TABLES


 Information sur la source

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :freeglobes, noyau, abstraction, bdd Niveau :Expert Date de création :15/12/2006 Date de mise à jour :16/12/2006 00:34:14 Vu / téléchargé :7 963 / 645

Auteur : vanadium1

Ecrire un message privé
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 Description

Il s'agit d'un mini-noyau complet pour gérer les accès base de données entièrement en langage objet. La puissance de ce noyau est que lorsque vous souhaitez obtenir l'accès objet à une table, il suffit de créer une classe qui dérive de MyObject pour créer le type de votre table, et une classe qui dérive de MyObjectManager pour créer un gestionnaire d'objets.
Ce noyau est utilisé dans le projet open-source FreeGlobes et est inspiré du noyau d'abstraction de Xoops, ainsi que de certaines routines de la plate-forme de blogs DotClear.
Avec ce mini-noyau vous pouvez :
- Vous pouvez gérer toutes vos tables très simplement avec des méthodes comme getObjects(), deleteAll() ... Toutes les requetes sont gérées par des objets Criteria, inspiré de Xoops
- Proposer un script capable de supporter plusieurs SGBD en écrivant simplement un nouveau driver (le driver MySQL est déjà fait :))
- Logger le nombre de requetes BDD faites
- Instancier vos gestionnaires d'objets par inversion de controle
- Gérer tout vos accès base de données en abstrait : plus aucune requete sql dans votre code métier !

Le code est entièrement commenté pour faciliter sa compréhension. Le code est en PHP4.


 Conclusion

Pour le support sur ces codes sources, je vous invite à venir poster sur le forum de Freeglobes (http://forum.freeglobes.net).

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

15 décembre 2006 13:43:38 :
Il manquait la classe TextSanitizer gérant le nettoyage des variables de l'objet.
16 décembre 2006 00:34:14 :
Une première ébauche de fichier exemple a été ajouté pour vous permettre de voir comment utiliser cette interface d'abstraction de la base de données. Ce fichier décrit les méthodes les plus courantes des objets Criteria, MyObjectManager, MyObject, MyConfigManager, MyLogger et MyTextSanitizer.

 Sources de la même categorie

Source avec Zip GÉNÉRATION AUTOMATIQUE DE FICHIER .CLASS.PHP EN FONCTION D'U... par ig3
CLASSE D'OBJET DE CRYPTAGE ET DÉCRYPTAGE DE CHAINES DE CARAC... par 8Tnerolf8
Source avec Zip MY.DEVIANTART API par inwebo
CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture PAGINATION + FICHIER CSS par profdi
SYSTÈME DE PAGINATION AVEC BDD ET IMAGES (FICHIERS) par begueradj
Source avec Zip SQLAL : CLASSE SQL POUR MYSQL, MYSQLI, SQLITE, SQL SERVER, E... par Boris090
Source avec Zip [PHP5] ABSTRACTION BDD STYLE PDO AVEC ITÉRATEURS, TRANSACTIO... par malalam
Source avec Zip CLASSE BASE DE DONNEES , EX AVEC MYSQL & MSSQL [PHP5 & PHP4] par malalam

Commentaires et avis

Commentaire de malalam le 15/12/2006 16:50:37 administrateur CS

Hello,

j'ai pas tout maté, mais c'est un joli package, de ce que j'en avais vu.
C'eut été plus joli en PHP5, mais bon...faut bien du PHP4 :-)
Pas grand chose à en dire là, je n'ai pas assez approfondi.

Commentaire de vanadium1 le 15/12/2006 20:03:19

Merci pour ton commentaire :)
C'est vrai qu'en php5, ça aurait été encore mieux mais j'ai encore du chemin avant d'atteindre ton niveau je pense. ;-)

Commentaire de malalam le 15/12/2006 22:43:44 administrateur CS

Re,

c'est gentil ça ;-)
Bon, j'ai maté un peu plus...mais pas encore testé, ni téléchargé à dire vrai donc je vais te faire quelques commentaires de plus, mais loin d'être exhaustif.
Je maintiens que ce serait vraiment chouette en PHP5 ;-) Avec des classes abstraites, de vraies constantes de classes, des ùéthodes abstraites (paskeu les méthodes qui retournent false parce qu'elles sont destinées à être surchargées...ça fait pauvre ;-) ).  Et des exceptions! Et un bel itérateur pour ta classe recordset...!
- 1er conseil : ajoute une doc! Et un ou plusieurs exemples d'utilisation. Parce que bon...déjà pour un bon codeur, faut un temps d'adaptation à mon avis pour utiliser ta classe...mais pour un moins bon codeur, même pas la peine d'y penser!
- ensuite : tu devrais laisser le choix, pour le log des requêtes. C'est bien d'avoir un logger. C'est mieux d'avoir le choix quant à son utilisation. Parce que moi je veux bien logger des update ou des insert, des truncate, des create table etc...mais des select, bof...je m'en fous un peu.
- mydatabase::quoteString () : attention... : c'est valable pour pas mal de base de données, dont mysql, et pas mal d'autres...mais pas pour certaines : au hasard, mssql. Ce qui fait que cette méthode ne devrait pas être définie ici. D'ailleurs, t'as un mysql::escape(), donc si ça se trouve un truc m'échappe là...mais bref, si tu fous un addslash sur une chaîne destinée à être insérée dans une base mssql, ben...ça va pas beaucoup t'aider pour les apostrophes.
- dans mysql, ou du moins la classe fille directement liée à la bdd utilisée, j'aurais vien vu des vérifications plus poussées sur les ressources. Via gettype (), et get_resource_type (), tu devrais bien t'en sortir en faisant bien gaffe...mssql_* encore, en php 5.0x, renvoie des entiers et non des ressources. Alors qu'avec php5.1+, t'as tes ressources).

Bon enfin...j'arrête là pour ce soir. C'est quand même très joli.

Commentaire de vanadium1 le 15/12/2006 23:54:38

je vais tacher de mettre des exemples d'utilisation.
Pour mydatabase::quotestring() et escape() c'est vrai qu'il y a redondance, je ne l'avais pas vu. Le logger est flexible, là il est très simple. Je peux eventuellement proposer ou non de l'activer.
Merci pour tes conseils. :)

Commentaire de wizad le 16/12/2006 11:57:58

Zut Malalam à été plus rapide que moi... :)

Donc en php5 ce serait (déja dit mais je le redit quand même... gniark).

Sinon ça à l'air d'être du costaud et d'être vachement intérréssant.  Cependant une chose ma surpise : le nombre de fichier. mais bon ce n'est pas une critique dans le sens ou il est vrai que le système d'accés à un SGBD est généralement le plus lourd dans un site donc autant faire quelque chose de bien.

Sinon je regarderais le code et testerai plus tard (suis pas sur mon pc).

Commentaire de wizad le 16/12/2006 12:05:12

euh j'ai quand même rapidement regardé et deux choses : +1 pour la doc.

Et sinon je vois pas quand est-ce que tu passe les informations de connexion à la base? C'est géré en interne sur la classe?
Si oui, c'est dommage pour ma part j'aurais préféré les passé via une méthode ou via le constructeur : cela permet d'utiliser un système de stockage de paramètre indépendant du système de gestion de bdd.

Commentaire de vanadium1 le 16/12/2006 14:35:59

La seule documentation qu'il y ait pour le moment, c'est les commentaires apportés au code (toutes les fonctions ont une entête aux standards Java) ainsi qu'un fichier exemple reprenant de façon très résumée les possibilités offertes.
Pour ce qui est du passage des informations de la base ça se déroule ainsi :
// instanciation d'un manager d'objets par inversion de controle
$link_m =& get_manager('link');
la fonction get_manager va inclure la classe définissant l'objet link et le manager d'objet link toute seule (suivant des conventions de nommage du fichier classe et des classes dans ce fichier).
dans class.object.php, tu remarqueras que dans le constructeur du manager d'objet nous avons :
$this->con =& DatabaseFactory::getConnection();
Ce code appelle la Factory qui s'occupe de l'instanciation d'une connexion à la base de données. On crée ainsi un découplage entre le type de base de données que l'on veut (SQL, PostGre...) et on laisse l'usine à connexion choisir pour nous le type de connexion approprié en fonction de $CONFIG['database'].
Database::getInstance() fait la meme chose que DatabaseFactory::getConnection();. Ce code est juste Deprecated, je l'utilisais dans un script et je l'ais conservé pour la compatibilité.
La Factory inclut le bon driver de connexion à la base et retourne une instance de celui-ci par inversion de controle suivant $CONFIG['database'] et en lui passant les paramètres de connexion à la base de données.
Le driver de base de données dérive de la classe MyDatabase qui est une interface indiquant les méthodes devant être implémentées dans les sous-classes (dans les drivers).

Commentaire de vanadium1 le 16/12/2006 14:37:35

La variable de configuration $CONFIG est dans le fichier conf/config.php. Elle définit le type de base de données ainsi que les informations de connexion à celle-ci.

Commentaire de kankrelune le 18/12/2006 11:05:21

Ah la class d'abstraction SGDB de Xoops... bien quelle présente quelques lourdeur c'est ma préférée elle est assez simple à prendre en main mais là ou ça se complique c'est lorsque l'on veux l'utiliser avec la class critéria qui est plus complexe à apréhender... par contre je pense que plutot que te passer par un tableau (déclaré en global je suppose) tu aurais du garder les constantes qui sont bien plus efficace à mon sens (déclarés dans le fichier conf et basta)... .. .

Sinon l'idée est bonne je regrette juste le "manque d'innovation" si je puis dire ça ainsi vu qu'une très grosse partie du package vient de xoops et n'a, à première vue, quasiement pas été modifié... ce qui est domage car certaines parties de ces classes (je pense notament au modèle object de xoops) demande à être retravaillé pour alléger le bousin... cependant ça reste un bon package... .. .

@ tchaOo°

Commentaire de vanadium1 le 18/12/2006 18:02:56

Effectivement, certains fichiers du packages sont issus de xoops (c'est d'ailleurs indiqué dans les sources ;)). Le modele objet a tout de meme été modifié pour supporter le gestionnaire de base de données maison : le modele de xoops ne gerait pas les clef des tables, et toutes les methodes (insert,update,delete...) sont désormais génériques, ce qui n'est pas totalement le cas dans Xoops. (sauf dans xoops 2.2 en derivant de xoopspersistablehandler)

Difficile d'innover pour une abstraction de base de données ! Et le bousin est assez léger tout de meme ;)

Commentaire de FhX le 24/12/2006 17:05:21

Oh bah je suis content de garder ma propre classe maison ( que j'ai refaite, pas celle qui est ici ^^).

C'est une vrai usine à gaz ton bordel... je comprend que c'est du PHP4 m'enfin quand même :)

Faudra m'expliquer l'intérêt du criteria par contre... Parce que si je décortique le code, ca veut dire que je fou dans un objet ma requète SQL (enfin juste des morceaux apparament), donc un premier parsing; puis ensuite, je redécortique mon objet d'un bout à l'autre pour reconstituer la requète (donc 2ème parsing).
Ca fait pas un peu beaucoup ?

Et puis quel intérêt de faire ca :S Personne ne sait écrire une requète SQL en dur ? :s

Et puis, faudra aussi me démontrer l'intérer de faire une factory si c'est pour ne gérer qu'une seule DB à la fois ! Parce que... ta factory, à part juste servir de Singleton pour ta classe SQL, elle ne sert à rien du tout. Je peux arriver au meme résultat dans une classe unique.

Si tu veux faire de la gestion d'erreur sur tes fonctions mysql_*, met un @.

Bref, y'a un problème d'usine à gaz dans ta factory pour commencer :)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

MySQL [ par intello2001 ] j'ai fait une base MySQL toute neuve, toute VIDE !!je voudrai avoir des exemple de création de table et tt sa...je c juste sa :$host="sql.free.fr";$ba 2 COMBOS BOX LIÉES À UNE BDD AVEC DÉPENDANCE [ par nash ] Le probléme est que je n'arrive pas à faire un formulaire avec 2 combos box dont la 2ème est initialisée selon la sélection effectuée dans la première envoyer une donnée a la bdd au dechargement de la page [ par Urukai1 ] Salut za tousje cherche le moyen de comptabiliser de temps de connexion sur une page et de l'envoyer a ma bdd pour cela au chargement je sais envoyer alimentation BDD [ par angelique ] Bonjour,J'ai créé des formulaires php pour alimenter ma BDD MySQL.Est il possible de l'alimenter avec un lecteur optique à partir de questionnaire?Et MAJ dans formulaire [ par bertrand85 ] Bonjour,j'ai une BDD (modifier par programme externe) et un formulaire, je voudrais que quand les infos de la BDD sont modifiés alors les données du f BDD et les image / lien [ par kodiask ] bjr je voudrai savoir coment on peu faire pr envoyer ds la BBD un lien sui sera clikable lorsqu'il sera afficher ds la page.ou pour faire qu'une im Fonction de mail dans BDD [ par zeuking ] Bonjour,imaginon, j'ai 1 BDD avec 89 tables dedans.1 table correspond a 1 membres ... Comment faire pour que chaque membres de la BDD puisse envoyer u Mettre un log et psw sur bdd mysql ??? [ par nova85 ] Comment met ton un login et un mot de passe sur une base mysql avec phpmyadmin ?nova Php & MySql ??? [ par nova85 ] Je voudrai savoir si il est possible de realiser un site assez important juste avec une BDD mysql , si c'est capable de resister , et surtout savoir s transfert BDD via FTP [ par bilboga ] Salut!Comment puis-je transférer ma base de données (MySQL)(ma_base.txt) via le ftp, Vosans passer par phpmyadmin, pour pouvoir l'utiliser?Merci!Bilbo


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,484 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales