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
|