Actualites | Forum |Archives
Le magazine des d�cideurs et webmasters qui gagnent !
Inscription | Livre d'or | Plan du site | 15 visiteurs actifs
   
A la Une
Actualit�
Dossiers
Communiqu�s
Coin Technique
Agenda des salons
Emploi
Echange de liens

Archives
S�lection
Exp�rience qui parle
Internet quotidien
Tous les dossiers

Forum
Forum SAM-MAG

Guides
Check-list de la promotion des sites
Promouvoir et r�f�rencer les sites web

Contact
Nous contacter
Newsletter
La protection des donn�es personnelles


 
  Utilisation de classes pour pallier des lacunes du SGBDR ...  Les langages objets
Dossier "SAM l'Informaticien" du 21 août au 3 septembre 2000 par Daniel Lucazeau

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
    • Identifiant ;
    • ..
  • 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

 
 
Google
 
Web www.sam-mag.com
 

Copyright � ACORUS 2004. All Rights Reserved

- Sam-Mag.com Referencement-Sur-mesure - Referencer-Site-Web.com
Visibilite-Internationale.com - Referencement-Immobilier.net