Next Previous Contents

3. Conception générale

3.1 Schéma de classes

Le formalisme objet proposé par php3 a été utilisé afin de factoriser le code et d'encapsuler les mécanismes appliquées aux données. On trouve trois familles de classe dans Mmmm !!!. Les classes héritant des classes de base HTMLelt, data et bd.

Les classes héritant de HTMLelt

La classe HTMLelt est la classe de base pour la représentation des éléments de formulaire HTML. Chaque élément est identifié par un nom unique. Cette classe possède les fonctions membres normal() et hidden() qui renvoient respectivement la représentation standard et en variable cachée de l'élément de formulaire. Chaque objet HTMLelt peut-être initialisé avec une valeur par défaut. Ce formalisme simplifie la création et la gestion de formulaire comme ensemble d'éléments unitaires.

La classe HTMLelt est dérivé en différentes classes implémentant chacune les comportement spécifiques aux éléments de formulaire HTML.

Les classes héritant de DataObject

La classe DataObject est conçue comme une classe de données générique, des données composées de plusieurs attributs identifiés chacun par un nom. Une instance de la classe peut être initialisée à partir d'une table de hachage contenant des paires (nom => valeur) ou à partir des valeurs de variables globales identifiées par une liste de nom passé en paramètre. Ce mécanisme permet d'initialiser simplement un objet à partir des données issues d'un formulaire HTML.

La classe propose des services génériques d'accès aux champs (méthodes get($nom), set($nom, $valeur), exists($nom)), des méthodes de conversion (vers une chaine de paramètres URL : méthode param(), vers une série de variables cachées de formulaire HTML : méthode hidden()).

Cette classe de base est dérivée en deux classes d'implémentation : Commentaire et Resto.

Les classes héritant de bd

La classe bd encapsule toutes les appels spécifiques à la base de données utilisée (mySQL dans Mmmm !!!). Toutes les fonctions qui ont accès à la base de données (en consultation ou/et en modification) utilise cette classe d'interface.

Les services proposées par bd sont assez génériques pour pouvoir être implémenté par tout type de base de données : connexion (méthode connect()), exécution d'une requête SQL (méthode execute()), récupération du nombre de lignes retourné par la requête précédente (méthode num_rows()), récupération itérative du résultat d'une requête (méthode get_next_row()).

Cette classe est dérivée en deux classes restoBd et commentaireBd.

3.2 Schéma de la base de données

Données manipulées

Le schéma de la base de données de Mmmm !!! est simplissime. Il stocke globalement deux types de données : des restos et des commentaires sur les restos.

Restos et commentaires sont identifiés par des numéros uniques. On y associe la date à laquelle ils ont été ajouté à la base.

Un resto a un nom, une localisation géographique (adresse, CP et ville, région et pays, métro le plus proche), des infos supplémentaires (téléphone, genre, ambiance sonore, horaires, fourchette de prix) et une représentation graphique (la carte scannée du resto). Toutes ces informations sont stockées en base exceptée la carte du resto (seul le nom du fichier est sauvé en base, le fichier est stocké à part sur disque).

Un commentaire est proposé par un internaute (nom et adresse e-mail) et comporte une petite prose ainsi qu'un avis résumant le ton du commentaire.

Organisation de la base

Les restos et commentaires accessibles par une personne consultant Mmmm !!! sont stockés dans les tables respectives restos et comments.

Pour éviter la pollution de la base par des informations non maitrisées et en trop grand nombre, un espace de stockage temporaire a été aménagé. Ceci signifie qu'un resto et/ou un commentaire proposé par un internaute sera, dans un premier temps, placé dans un espace à part avant d'être validé par un administrateur. Les tables de l'espace temporaire ont la même structure que les autres, elles sont nommées respectivement restos_en_attente et comments_associes (pour l'ajout de nouveau resto) et comments_seuls (pour un commentaire sur un resto existant en base).


Next Previous Contents