begin process at 2012 05 31 17:31:15
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

POO

 > 

Classes & Objets

 > 

Structure schématique pour une couche d'abstraction SGBD


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Structure schématique pour une couche d'abstraction SGBD

lundi 3 septembre 2007 à 20:48:41 | Structure schématique pour une couche d'abstraction SGBD

codefalse

Administrateur CodeS-SourceS
Bonsoir/Bonjour à vous tous

Voila, je suis quelque peu en galère.
J'aimerai me faire ma propre classe Database qui implémenterai n'importe quelle interface derriere (MySQL, MsSQL, etc).
Par contre je bloque sur un soucis de structuration.
J'essaye de faire en sorte que ma classe soit la plus propre possible pour pouvoir etre évolutive sans trop gener les classes dépendantes.

Voila ce qu'il en est
J'ai
_ une classe abstraite qui contient les fonctions connect, select_db, close, query, num_row, fetch, fetch_all
_ une classe DBiterators qui contient les next, current, prev, valid, key, seek, count et consor
_ une classe MySQL qui étends la classe abstraite pour les fonctions connect, close, etc


Ce que j'aimerai, c'est que ma classe abstraite soit découpé en plusieurs parties (deux exactement)
_ Une classe (abstraite) AbstractMainDB (connect, close, select_db, last_error)
_ Une classe (abstraite) AbstractActionDB (query, prepare, execute, fetch, fetch_all)

Mais il y a autre chose, j'aimerai que ma classe DBIterators soit liée à ma classe Main.

L'idée serait que la classe MySQL étendrais AbstractMainDB, tout en puissant utiliser les fonctionnalitées additionnelles de AbstractActionDB.
La classe AbstractActionDB quant à elle serait en liaison avec la classe DBIterators.

Est-ce possible de lier tout ca sans faire passer les instances en variable dans les différentes classes.

La seule solution que j'ai trouvé serait de faire une classe abstraite DBIterators, une classe abstraite AbstractMainDB qui étends la classe DBIterators et la classe AbstractActionDB qui étends la classe AbstractMainDB. La classe MySQL quant à elle étendrait la classe AbstractActionDB

Mais voila, j'étends la classe AbstractActionDB au lieu de DBMain, et DBIterator se situe au dessus de AbstractMainDB alors que logiquement (ce que je trouverai logique :p), elle devrait se trouver entre AbstractMainDB et AbstractActionDB.

J'espere avoir été assez clair

Merci beaucoup de votre aide !!
lundi 3 septembre 2007 à 22:40:29 | Re : Structure schématique pour une couche d'abstraction SGBD

malalam

Administrateur CodeS-SourceS
Hello,

je ne vais pas te répondre directement parce que c'est à toi de trouver la structure qui te plait. Je vais juste t'aiguiller : tu réflêchis trop linéairement. Tu veux faire ça :
O -> O -> O -> O
Alors qu'il y a tellement de façons de faire très différentes ;-)
Tu devrais jeter un oeil sur mes nouveaux tuto, je pense qu tu y découvriras quelques façons d'organiser les objets auxquelles tu n'avais pas songées, là, apparemment.
Un objet peut en cacher un autre... : en php, on a parfois des trucs de ce genre :
obj -> method() -> newobj -> newmethod() (je schématise).


lundi 3 septembre 2007 à 23:34:39 | Re : Structure schématique pour une couche d'abstraction SGBD

codefalse

Administrateur CodeS-SourceS
hum, ok je vais voir tes différents tutoriaux, mais pour l'instant, je ne vois toujours pas trop comment faire :p

J'ai une proposition à te faire.
Je te dit ce que j'aurai comme solution, et tu me dit si c'est correct, ou au contraire si ca tient pas debout.
Car je viens de regarder tes deux tutoriaux sur les designs pattern, et j'ai un peu du mal !! :p

Le soucis c'est que j'arrive vraiment pas a voir comment faire.

Est-ce que je devrais faire un truc du genre :

$monObj = new MaClassMain (new MaClassAction); ?
mais je sais pa trop comment implémenter la classe SPL !

tu peux me donner plus d'indices ? (chuis d'accord pour ne pas tout me dire, ce serait trop facil, et c'est pas interessant, mais là, je patoge encore trop :/)

merci de ton aide ! :)
mardi 4 septembre 2007 à 01:08:24 | Re : Structure schématique pour une couche d'abstraction SGBD

codefalse

Administrateur CodeS-SourceS
Bon, apres lecture, re-lecture, re-re-lecture et encore rerererelecture de tes deux tutoriaux sur les designs pattern, je suppose, mais alors sans absolument aucune certitude, que la partie qui me concernerait, serait celle du Builder ? (partie 1 de tes tutos)

J'ai vraiment du mal a me concevoir le code dans ma tete par rapport à ce que je veux faire.
Tu pourrais m'en dire plus  s'il te plait ?

Merci
mardi 4 septembre 2007 à 01:26:46 | Re : Structure schématique pour une couche d'abstraction SGBD

DiGhan

Salut,
le principal protagoniste étant ici, je pense que la meilleure source à ce sujet reste celle-ci: http://www.phpcs.com/codes/PHP5-ABSTRACTION-BDD-STYLE-PDO-AVEC-ITERATEURS-TRANSACTIONS_42818.aspx
Comme toi, j'étais confronté aux problèmes de design concernant l'abstraction SGDB mais aprés plusieurs essais je suis retombé sur la même structure que la source présentée ci-dessous. Si j'ai un conseil à te donner c'est d'y jeter un coup d'oeil.


mardi 4 septembre 2007 à 11:28:52 | Re : Structure schématique pour une couche d'abstraction SGBD

codefalse

Administrateur CodeS-SourceS
en fait j'ai deja pas mal potassé cette source, a vrai dire, je l'ai meme faite et refaite, mais j'aimerai bien tenter mon coup histoire de comprendre vraiment les design pattern sans recopier un code (je ne dit pas que tu l'a recopié ! ;) ).
Sa source est interessante, mais j'aimerai essayer la mienne :) si ca ne pose pas de problemes :p

Mais merci quand meme de ton lien et de l'interet que tu porte à vouloir m'aider :)
mardi 4 septembre 2007 à 18:35:48 | Re : Structure schématique pour une couche d'abstraction SGBD

malalam

Administrateur CodeS-SourceS
Merci ;-)

J'ai pas franchement le temps. Mais mon idée : je ne veux pas t'expliquer clairement des trucs parce que tout le bonheur de la POO c'est bien de modéliser ses packages ;-) Donc je veux que tu trouves TA solution.
Mais...tu veux séparer l'action de la "connection". Ok pourquoi pas, c'est pas nouveau. Au fond, pourquoi ta classe action ne serait pas renvoyée par une classe de plus haut niveau ? J'instancie une classe X, je fais une connecxon, une requête...la requête renvoie un objet de type "action", avec qui je peux parcourir le résultat de ma requête. Un peu façon PDO. Dans ce cas, tu dois revoir ta façon linéaire de réflêchir ton code.
Tu peux aussi t'appuyser un peu sur le DECORATOR, en suivant mon code, ou celui du BUILDER...éventuellement. Et évidemment, en mixer plusieurs...
Tu peux avoir un objet qui choisit l'objet à utiliser en fonction du contexte, au seins d'une collection de petits objets dédiés (à la façon du STRATEGY pattern).
Etc etc...
A toi de voir!
jeudi 6 septembre 2007 à 08:44:21 | Re : Structure schématique pour une couche d'abstraction SGBD

codefalse

Administrateur CodeS-SourceS
En fait, je me base sur SQLite pour établir mon code (d'ou l'intéret de séparer la classe de base et les autres), et par rapport à ca, j'aurai une proposition :

abstract class DBMain
   + method() : connect
   + method() : open
   + method() : select_db
   + method() : close
   + method() : last_error
   + method() : version
   + method() : free_result

abstract class DBResults extends DBMain
   + method() : fetch
   + method() : query
   + method() : single_query
   + method() : fetch_all
   + method() : fetch_array
   + method() : fetch_object
    * avec une instance de DBIterators pour key, current, next, prev, ...

abstract class DBUnbeffered extends DBMain
   + method() : fetch
   + method() : query
   + method() : single_query
   + method() : fetch_all
   + method() : fetch_array
   + method() : fetch_object
   * chaques fonctions appelent ensuite la fonction free_result

Par contre j'ai un soucis pour mes classes mysql, mssql et autres, je devrait en faire deux, une pour DBResults et DBUnbeffered ou si je fait
class mysql extends DBMain, ca marcherait ?

Qu'en pense-tu ?


Cette discussion est classée dans : classe, abstraite, abstractactiondb, abstractmaindb, dbiterators


Répondre à ce message

Sujets en rapport avec ce message

Structure de classes [ par codefalse ] Bonjour à tous,j'ai un petit soucis de structure, histoire de bien faire.Alors voila, j'ai une classe abstraite (qui me permet d'utiliser différents t Classe abstraite DataBase [ par codefalse ] Hello les gens :)J'ai développé un petit ensembles de classes en php 5, et j'aimerai votre avis :)Je ne vous le cacherai pas, je me suis énormément ba Design Patterns : Singleton et Classe Abstraite [ par neigedhiver ] Salut, N'étant pas encore au point avec les motifs de conception, je me pose une question qui a sûrement une réponse toute bête. J'aimerais avoir un Champ faisant référence à une autre classe. [ par finalspirit ] Bonjour,Je suis actuellement en DUT Informatique et on a appris à utiliser le Java. Je connais donc les classes.Je vois pas comment ça fonctionne sous appeller de fonction "interclasses" [ par DDelec24 ] Bonjour.Je suis bloqué depuis hier sur un problème pour appeller une fonction.Pour résumé:Je possède une classe mysql pour gérer tout ce qui est reque Probleme POO [ par cedriclomb ] Bonjour,Aujourd'hui au programme casse tete chinois ! :DVoila j'ai une classe B qui est une extends de Aun objet $b=new B;et ensuite $b->loadModule('C function_exists mais dans une classe [ par cedriclomb ] Bonjour,je cherche une fonction pour tester si une fonction existe mais dans une class exempleif(function_in_class($this->{$act}->getPage()){     retu Utiliser une classe template et une autre en meme temps... [ par big_mama ] Bonjour a tous.Mon probleme : Je suis entrain de me faire un pti site, pour cela j'utilise deux classe.La premiere gere les template et la seconde le créationd'une base en mysql [ par sofiesofie ] bonjour, je veu créer une base de donnée par le eaysyphp1.6 .je fait mon diagramme de classe en UML. e j'ai une classe  QUESTION(num_qst, laquestion, erreur : file_exists / readfile [ par Killan ] Bonjour,Je suis en train de me faire une petite classe sympa et dedans, à un moment donné, je fait un file_exists pour ensuite faire un readfile du me


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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 : 1,388 sec (4)

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