|
es SGBDR doivent g�rer les relations, c'est le 'R' de leur
nom ! C'est � dire que les valeurs de certaines colonnes de tables doivent exister
dans une colonne d'une autre table. Oracle comme Access le font..
Mais un SGBD tr�s utilis� sur le net comme MySql ne le fait
pas, les concepteurs s'en expliquent - voir pour cela http://dev.nexen.net/docs/mysql/annotee/manuel_Missing_Foreign_Keys.php.
Nous allons, � partir d'un exemple concret, mettre en place
des objets ou plut�t des classes d'objets qui vont nous permettre d'avoir une
application propre. Nous allons �tudier un annuaire de sites ; sans chercher une
compl�tude mais suffisamment riche pour pour mettre en avant les concepts expos�s.
Voici le mod�le des donn�es g�r�es :
(Cliquez
sur l'image pour voir ce graphe en plus grand)
et le mod�le de tables sous-jacent :
(Cliquez
sur l'image pour voir ce graphe en plus grand)
Objet
'SITE'
Nous allons cr�er une sous-classe de la classe d'acc�s au
SGBD, qui sera sp�cialis�e dans la manipulation de la table 'SITE'. Cette classe
va impl�menter les r�gles de gestion inh�rente � la table :
- Cr�ation
- Donn�es en entr�e (nom, type, ..) ;
- On v�rifie que 'type' appartient bien � la table 'TYPE'. Si
les valeurs proviennent d'une liste de choix, la coh�rence est assur�e, mais on
peut faire le choix d'impl�menter cela quand m�me pour traiter des mouvements
en off-line ;
- On v�rifie que le site n'est pas d�j� cr��.
Objet
'TYPE'
Nous allons cr�er une seconde sous-classe, sp�cialis�e elle
dans la manipulation de la table 'TYPE'. On impl�mentera par exemple :
- Cr�ation
- Les donn�es doivent �tre valides
- Et ne pas d�j� exister
- Suppression
- Donn�es en entr�e (idSite) ;
- On v�rifie que ce type ne soit plus une typologie de site
existant...
|
Notation sommaire
|
|
Classe SITE sous-classe
de BDD
- Donn�es/Attributs
- Identifiant ;
- Nom du site ;
- Type du site ;
- ..
- Services/M�thodes
- Fiche descriptive ;
- Cr�ation d'une fiche ;
- Mise � jour d'une fiche
;
- Suppression d'une fiche
;
- Etc..
Fin de la classe.
Classe TYPE sous-classe
de BDD
- Donn�es/Attributs
- Services/M�thodes
- Fiche descriptive ;
- Cr�ation d'une fiche ;
- Mise � jour d'une fiche
;
- Suppression d'une fiche
;
- Etc..
Fin de la classe.
|
D�veloppons la m�thode " cr�ation " de la classe 'TYPE' :
M�thode creaType ( idType, libType)
Si (id et lib sont des cha�nes non vides) alors
Si (id n'existe pas) alors on le cr�� et on renvoie
le r�sultat ;
Sinon on renvoie faux
Ce n'est pas l'application qui se pr�occupe de g�rer les erreurs
avec la base de donn�es mais l'objet lui-m�me qui est responsable de son comportement.
On aurait pu utiliser dans ce cas pr�cis les retours d'informations des fonctions
d'acc�s MySql de PHP, mais cela ne l'est plus (possible) pour g�rer les contraintes
d'int�grit� r�f�rentielle.
|
Ce qui donne en PHP
|
|
class typeDeSite extends
aj_Db {
���� function typeDeSite () {
������� $this->aj_Db();
���� }
��� function creaType( $idTypeSite
= "", $libelleTypeSite = "") {
������� $status = 0;
������� // retour <=> VRAI si cr�ation OK // FAUX sinon
������� if ( $idTypeSite && $libelleTypeSite) {
����������� if ( !$this->rechType( $idTypeSite)) {
��������������� $rqSql = sprintf("INSERT INTO typeDeSite VALUES( '%s',
'%s')",_ $idTypeSite, $libelleTypeSite);
��������������� $status = $this->query( $rqSql);
����������� }
������� }
������� return $status;
��� }
��� function rechType( $idTypeSite
= "") {
������� // retour <=> VRAI si existe // FAUX sinon
������� $rqSql
= sprintf("SELECT * FROM typeDeSite WHERE idTypeSite
= '%s'",_ $idTypeSite);
�� �����$this->query( $rqSql);
������� return $this->next_record();
��� }
����
}��� // end of class typeDeSite
|
Conclusion
Tout n'est pas d�velopp�, car ce n'est qu'un cas d'�cole pour
vous faire entrevoir la puissance de l'orientation objet. Je n'ai pas fait de
comparaison de performance entre ce syst�me et un autre avec contr�le int�gr�s
(par ex. Asp/Access).
Mais quand on n'a pas le choix des logiciels de base, il faut
s'adapter. Et, plut�t que de se lamenter sur les risques d'incoh�rence
(avec par exemple PHP/MySql), il vaut mieux prendre les devants en fournissant
en m�me temps:
- la base de donn�es au(x) d�veloppeur(s) (nopus pouvons être
le livreur et le livré)
- et les composants logiciels qui vont assurer l'int�grit� de
la base dans le temps.
A suivre�
Vous
lirez avec intérêt :
- La
r�utilisabilit�... les langages objets
Daniel
Lucazeau
Ajornet.com
Chef de projet Internet
Développeur informatique
Tous
droits réservés - Reproduction même partielle interdite sans
autorisation préalable
|