besoin d'avis/d'aide consctruction classe/programme

Rechercher

besoin d'avis/d'aide consctruction classe/programme

Par kevin  -  4 reponses  -  Le 24/03/2012 14:12  -  Editer  - 

Bonjour à tous je suis nouveau sur le forum, pour la présentation j'ai 22ans et détiens quelques notions en developpement informatiques suite à un bts IRIS.

Concernant mon post, une petite explication :

j'ai crée en stage de premiere année de bts un propramme (exercice niveau primaire/college de géométrie sur les angles : obtus, aigus, ...) sur une plateforme LAMP utilisant donc PHP (avec librairie GD pour "dessiner les angles"), MYSQL, et JAVASCRIPT. Celui-ci, permet à un utilisateur de se connecter/supprimer/creer un compte via une BDD, l'utilisateur une fois connecté peut choisir un exercice (trouver les angles de même type, trouver l'intrus...), changer de theme, ou visionner les statistiques sur les différents exercices. Une fois l'exercice choisis il peut ajuster la difficulté et la vitesse. Une fois l'exercice débuté plusieurs éléments sont présents : une jauge de bonne/mauvaise réponses, un chronomètre, et 4 angles l'un à côté de l'autre.

Voilà pour l'intro ^^, je me suis replongé dedans et la sa a été le drame : 0 commentaires, architecture du programme ba yen avait pas de trop xD, pas de css ^^... C'est pourquoi j'aurais besoin d'un petit coup de main pour réorganiser tout sa. Mes fichiers en gros : "image_chronometre", "image_angle", "image_jauge" qui ne font que récupérer des valeurs et les utiliser pour créer une image, "classe_angle" qui initialise et calcul les coordonnées des angles, en crée au hasard ou non, les affiche... et dans mon fichier "exercice" ba je fait tout le reste ^^ enfin c'est un sacré chantier...

-J'utilise la librairie GD pour faire un chronomètre : j'ai un compteur qui envoie un entier au fichier "image_chronometre" en fonction de celui-ci je vais afficher plus ou moins de segments sur l'afficheur. Exemple je recois 1 je n'affiche que les segments haut_droit et bas_droit...

->N'y a t-il pas de solutions plus simple?

-Pour contenir un angle je crée un rectangle toujours avec GD

->Ce code est-il à sa place dans la classe "Angle" ou devrait-il être séparé?

->Je pensais faire une classe "Case" représentant le rectangle de contenance

-Je pensais faire une classe "Angle" qui prends en paramètre le type d'angle (obtus, aigus,...) avec pour attributs toutes les coordonnées pour le fabriquer...

->Dois-je créer la classe Angle et à l'aide du paramètre et de méthodes fabriquer les angles de différents types ou plutôt créer la classe Angle et une classe pour chaque types d'angles différents?

-et enfin je pensais aussi faire une classe "Exercice" pour gérer le déroulement de l'exo et une classe "verifier_reponse".

Merci d'avoir pris le temps de me lire

 

Réponses apportées à cette discussion

Par Cyrano  -  Le 25/03/2012 09:12  -  Haut de page  - 

Salut Kevin,

il semble qu'il manque effectivement une architecture rationnelle dans ton application. La base consisterait donc à séparer le code métier des classes. Par ailleurs, si on veut appliquer quelques bonnes pratiques, outre les commentaires dans le code, il faut faire en sorte que chaque classe ne fasse qu'une seule chose et qu'elle le fasse bien. Ensuite, on fait collaborer si nécessaires plusieurs classes pour combiner certains traitements. Donc l'idée d'atomiser les classes complexes en de multiples classes simples qui ne font chacune qu'une seule chose est tout à fait valable. Ça va simplifier la maintenance et l'extensibilité.

Ensuite, l'idée de la classe « Exercice » gérant le déroulement se rapproche du contrôleur d'une architecture MVC (Modèle-Vue-Contrôleur) : ça veut dire qu'il faut ajouter une partie Modèle qui va gérer la logique applicative en récupérant les données. L'appel des classes de traitement d'images sera fait à partir des modèles et le résultat sera retourné au contrôleur : ce dernier définira ensuite quelle vue doit être utilisée pour construire la page à partir des données du modèle et la retourner vers la sortie standard, en l'occurrence le navigateur de l'internaute.

Une classe « verifier_reponse » serait à classer dans les modèles et appelée ou non par la classe contrôleur « exercice » selon les paramètres reçus. Quant au classes « angle », « case » etc.., elle seront à classer dans un package dans un répertoire « librairies ». Mais ces classes ne devront pas gérer autre chose que le traitement de données à partir de paramètres reçus du modèle et retourner des données à ce même modèle. Le modèle combine les divers résultats de traitements des classes des librairies et retournera alors au contrôleur les données nécessaires à la construction de la vue : en bref, on sépare bien distinctement les responsabilités.

Globalement, ça représente davantage de fichiers, mais en séparant les couches traitement/accès aux données/affichage, on se simplifie la vie sur le long terme et c'est en général comme ça que sont structurés la plupart des applications basées sur les frameworks actuels. En résumé, je dirais à priori que tu es sur la bonne voie ;)

 
Par kevin  -  Le 26/03/2012 14:03  -  Haut de page  - 

Salut Cyrano,

Merci pour t'as réponse, effectivement au moment de créer se programme j'ai pas réfléchis je me suis lancé tête bessée pas assez d'expérience on va dire sa comme sa ^^...

Je vais me lancer dans des petits diagramme UML avec umbrello pour essayer de mieux visualiser quelles classes je vais créer et surtout à quoi elles vont servir, c'est le plus dur pour moi savoir quelles classes créer et quoi mettre dedans...

Ah le MVC... ^^ j'ai du me pencher dessus pendant mon projet de deuxième année ont travaillaient sur le drone de parrot avec mac, iphone, ipad en objective-c c'était sympa je vais revoir tout sa.

Bon ba comme qui dirait ya plus qu'à :p je repasserais dans le coin en cas de pépin

Bonne continuation Cyrano

 
Par kevin  -  Le 02/04/2012 17:46  -  Haut de page  - 

Salut Cyrano,

j'ai une petite question dois-je créer un controlleur pour chaque vue?

 
Par kevin  -  Le 02/04/2012 22:28  -  Haut de page  - 

une autre question j'ai repris le code du tuto livre d'or avec mvc et pdo mais mes fonctions et variables ne sont connus sauf si j'inclus les fichiers nécessaire à chaque autre fichier et toi tu ne le fais pas :

<?php
/**
  * Constantes d'accès à la base de données
  **/
// Adresse du serveur de base de données
define('host_db', 'localhost');
// Login
define('user_db','root');
// Mot de passe
define('password_db','azerty');
// Nom de la base de données
define('name_db','exercice');
// Nom de la table exercice1
define('table_identification_db','identification');
// Nom de la table exerice2
define('table_resultats_db','resultats');
// Driver correspondant à la BDD utilisée
define('dsn_db','mysql:host='. host_db .';dbname='. name_db);
?>
<?php
  function PDOConnect($sDbDsn, $sDbLogin, $sDbPassword)
  {
    try
    {
      $oPDO = new PDO($sDbDsn, $sDbLogin, $sDbPassword);
    }
    catch (PDOException $error)
    {
      die('Une erreur interne est survenue' . $error->getMessage() );
    }
    $oPDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $oPDO;
  }
?>
<?php
  /** ----
 * Initialisation de la connexion avec la base de données
 **/
//include('../model/exercice-model.inc.php');
//include('../librairies/exercice-config.inc.php');
$oPDO = null;
$oPDOStatement = null;
  $oPDO = PDOConnect(dsn_db, user_db, password_db);
  try
  {
    // Création d'une requête préparée
    $oPDOStatement = $oPDO->prepare('INSERT INTO '. table_identification_db .' (id, Utilisateur, Mots_De_Passe) VALUES(:id, :user, :mdp)');
    // Ajout de chaque paramètre à la requête
    // Les paramètres sont automatiquement protégés par l'objet PDO
    $oPDOStatement->bindParam(':pseudo', $_POST['id'], PDO::PARAM_STR);
    $oPDOStatement->bindParam(':message', $_POST['user'], PDO::PARAM_STR);
    $oPDOStatement->bindParam(':note', $_POST['mdp'], PDO::PARAM_STR);
    // Execution de la requête préparée
    $oPDOStatement->execute();
  }
  catch (PDOException $oPdoException)
  {
    $erreur = 'Une erreur est survenue et a empêché l\'enregistrement de votre message';
  }
?>
<?php
/**
 * Programme principal
 * Construit la page à partir de tous les fichiers
 */
require(dirname(__FILE__).'/librairies/exercice-config.inc.php');
require(dirname(__FILE__).'/model/exercice-model.inc.php');
require(dirname(__FILE__).'/controlleur/exercice-controlleur.inc.php');
require(dirname(__FILE__).'/view/exercice-view.inc.php');
?>

mon fichier exercice-view.inc.php ne fait qu'envoyer en POST des valeurs a mettre dans ma bdd

 

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |