IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[conception] Un projet php (POO-BDD-Ajax-CSS)


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 18
    Points
    18
    Par défaut [conception] Un projet php (POO-BDD-Ajax-CSS)
    Bonjour,
    Alors comme mon post est un peu long, une petite accroche pour encourager la lecture ou pour faire gagner du temps à ceux qui recherchent autre chose.
    Ce post aborde la question de la conception d'un projet php (POO-BDD-Ajax-js-CSS) dans son ensemble, à partir d'un exemple simple. Il ne fourni pas de code et n'en demande pas, mais aborde uniquement les questions de conception/organisation pour une projet php "propre". Je pense que par son approche globale et les questions pragmatiques posées, il pourrait servir de base à un futur tutoriel. Il vaut mieux déjà connaître et avoir utilisé un peu php, ajax, css, html, le SQL et les bases de données.

    Après avoir fait un peu de programmation structurée, je me décide comme beaucoup a tenté la programmation objet en php 5. Il se trouve, comme beaucoup également, que le passage entre théorie et pratique n'est pas évident. D'autant que le projet qui m'intéresse, à savoir une application web, aujourd'hui, est sensé respecter certaines règles pour être «propre», comme par exemple la séparation du traitement et de l'affichage.
    Ce qui m'intéresse n'est donc pas le code en soi, mais la démarche et la logique à respecter. J'ai déjà développé une partie de l'application «salement» en code structurée pour avoir et pour donner une idée rapidement de ce que ça peut donner, je veux maintenant mettre tout ça au propre avant de poursuivre.
    Bref, il en résulte pour moi des questions, et le plus simple il me semble est de prendre comme exemple un projet de développement très simple, mais de A à Z. Il est différent de mon vrai projet évidemment, mais va me permettre de soulever les questions qui m'intéressent sans trop de fioritures et de répétitions (quoique l'ensemble soi long). L'idée étant d'avoir un exemple simple à traiter comme s'il s'agissait d'un projet très vaste.

    1. Description:
    L'objectif est de gérer une BDD de contacts à 3 tables via une interface web.

    1.1 Les 3 tables sont :
    CONTACTS :
    id_contact (clé primaire)
    nom_contact
    prenom_contact
    id_ville (clé étrangère)

    VILLES :
    id_ville (clé primaire)
    nom_ville

    USERS :
    id_user (clé primaire)
    login
    mot_de_passe

    1.2 Les contraintes techniques :
    - Programmation objet en php (je connais php, mais l'objet qu'en théorie)
    - Base Mysql pour commencer, mais susceptible d'être remplacée par du postgre, voire plus conformément à l'exemple du ldap (je sais faire du SQL et utiliser les fonctions mysql de php, un peu adoDB et pas du tout PDO pour le moement)
    - Une interface dynamique, c'est à dire avec du js et de l'ajax. (je connais l'ajax et suffisamment du js)
    - Possibilité d'import de masse pour commencer à parir de csv, mais susceptible d'être du xml.
    - Séparation forte de la gestion de l'apparence, en utilisant éventuellement un système de template comme smarty et css (je connais le css, mais pas smarty)
    - Une gestion simple des droits d'accès, c'est à dire autorisation ou non d'entrer dans l'application.

    1.3 Le résultat désiré

    Principalement 4 pages :
    - 1 page de login (autorisation ou non)

    - 1 page de consultation avec :
    - une liste déroulante des villes, avec à chaque sélection d'une ville l'affichage des contacts de cette ville sans rechargement de la page (donc avec de l'ajax)
    - Un bouton d'export en csv
    - 1 page de saisie :
    - 2 zones de texte : nom, prénom
    - Une liste déroulante des villes
    - 1 bouton pour l'import csv
    - 1 page de paramétrage de l'import csv :
    - Affichage des résultats d'analyse du fichier csv (on admettra que les csv ont tous la même forme, c'est à dire que la première ligne correspond aux en-têtes, et qu'il n'y a pas d'en-têtes de ligne)
    - Cette page indique donc le nom des champs et les valeurs qui vont être insérées dans la base, afin d'effectuer une vérification avant l'import.

    Voilà pour les différents éléments du projet, s'il vous semble qu'à certains endroits il y de nombreuses exceptions ou de nombreux cas à gérer, partons du principe que notre situation est la plus simple possible.

    2. Maintenant mes réflexions et mes questions (enfin!!! )

    2.1 Les classes à créer :
    Une Classe par Table :
    J'aurais tendance à commencer par faire une classe par table de ma base.

    question 1 :
    A la place de la stricte table CONTACTS, ma classe Contacts correspondrait à la vue suivante :
    id_contact
    nom_contact
    prenom_contact
    id_ville
    nom_ville
    donc la table CONTACTS, avec en plus le nom de la ville, est-ce une aberration ?

    question 2 :
    - j'aurai besoin régulièrement d'avoir la liste complète des villes, est-il alors judicieux de créer une méthode AfficheTouteslesVilles() dans la classe Villes ? Il me semble que non, mais bon...

    question 3 :
    D'une manière plus générale on pourrait étendre cette question à : "doit-on mettre des requêtes de type SELECT dans des classes, ne sont-elles pas restreintes à l'instantiation des classes et donc strictement externes ?"

    Une Classe BDD :
    Ensuite je ferai une classe BDD, avec les propriétés, codes d'accès à la base et les méthodes de connexions, déconnexion, etc...Cette classe ferait elle-même appelle à d'autres classes en fonction du type de BDD, par exemple une classe Mysql et une classe postgresql. .

    questions :
    Est-ce nécessaire ? Et quelle manière propre pour le faire ?

    Une Classe Fichiers :
    Puis, une classe Fichiers, sur le même principe que la classe BDD, elle ferait appelle à d'autres classes en fonction du type de fichier, en l'occurrence une classe csv et une classe xml.

    Une Classe Connexion :
    Une classe Connexion, pour gérer les users et autoriser ou non l'accès.

    questions :
    Concernant cette gestion des droits, est-il judicieux d'utiliser par exemple une variable session contrôlée à chaque entrée de page php (ça me paraît lourd), pour autoriser ou non l'exécution du script ?

    2.2 La Mise en forme :
    Vient ensuite la question de la mise en forme, là je ne sas vraiment pas, si tant est que pour le reste je sois un peu dans les clous.
    Est-ce que je dois faire une classe qui se chargera de présenter les données aux moteur smarty ? Comment est-ce je donne les ID, NAME, CLASS, ONSELECT, dont j'aurai besoin pour le css et le js ?

    3. Les fichiers du projet
    3.1 Liste des fichiers
    - Un fichier de configuration config.php (php, ini?) avec des constantes pour paramétrer l'accès à la base, ou pour fixer certains paramètres comme la résolution maximale, le chemin racine pour l'upload des fichiers, etc...
    - une fichier header.php pour les en-têtes
    - un fichier footer.php, pour les pieds de page
    - un fichier par classe
    - Une page index.html, avec un simple formulaire login+mot de passe
    - Un fichier styles.css pour les styles
    - un fichier fonctions.js pour les fonctions js et l'ajax
    - une page consultation.php pour la consultation, avec un appel d'ajax sur la liste, et donc un second fichier listes_contacts.php qui affiche la liste des contacts.
    - Une page saisie.php, pour la saisie manuelle et un formulaire d'upload de fichier.
    - Une page import.php, qui traite le fichier uploadé, affiche le résultat pour valider l'import.

    Faut-il d'autres pages, comme fonctions.php, avec des fonctions comme la génération de listes déroulantes, ou de tableaux. Là c'est mon ignorance de l'utilisation de smarty qui me freine.

    3.2 Une arborescence possible
    Une proposition d'arborescence :
    offline-shared
    fonctions.js
    fonctions.php
    smarty ?
    Offline-contacts
    config.php
    header.php
    footer.php
    les classes php
    styles.css
    liste_contact.php
    uploads (temp*?)
    Online
    index.html
    consultation.php
    saisie.php
    import.php

    Voilà, j'ai été très long, je m'en excuse, mais j'ai tenté d'être complet et clair (je l'espère), afin de poser précisément mes questions et pour obtenir vos lumières, avis et conseils. Les infos éparses, que je glane par-ci, par-là, me semblent difficiles à interconnecter pour avoir une vision d'ensemble (mais c'est moi qui ai du mal à synthétiser), donc voilà ce post...
    Encore une fois, je ne demande pas de code (sauf peut-être des exemples pour smarty), mais juste des avis, conseils, orientations sur la démarche et la construction du projet, en imaginant qu'il soit d'une bien plus grande envergure, évolutif, et potentiellement soumis à un travail d'équipe.


    D'avance un grand merci !!!

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 33
    Points : 18
    Points
    18
    Par défaut
    Bon ben j'ai commencé à coder en suivant les principes énoncées ci-dessus, pour le moment sans smarty.
    Je ne suis pas persuader d'être très efficace et il me semble faire du code pour rien, mais ça marche.

    Merci quand même !

  3. #3
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Indigeste gluprssss

    Tu devrai poser une ou deux questions précises
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  4. #4
    FoxLeRenard
    Invité(e)
    Par défaut
    Quel beau projet, et trés bien décris,
    Je penses ne pas déformer ce que nombreux ont pensé en te lisant,

    C' est trés précis et exigent, le but étant si je t'ais bien lu, d'étre portable dans un autre langage, et donc bien sur orienté OBJET !!

    D' ou la création de classes dont tu parles.

    ICI nous faisons quoi ?

    Pas des projets complets , et pourtant certains tu le lira nous demandent, carément de leur faire leur thése de fin d'études
    Voir leur site web de A àZ

    Alors comme le dit elcoyotos, nous avons tous lu ton projet, et donc lorsque tu viendra sur tel ou tel point demander un avis, ce sera avec plaisir.

    Je ne suis ni modérateur ni rien de plus que toi ici, simplement je me suis permis de recadrer les choses.

    Pour finir, ta remarque:

    Bon ben j'ai commencé à coder en suivant les principes énoncées ci-dessus, pour le moment sans smarty.
    Je ne suis pas persuader d'être très efficace et il me semble faire du code pour rien, mais ça marche.
    me fais te dire, bien sur ton projet pourrait étre écris assez simplement, mais ton cahier des charges exige semblet'il que tu construises cette ossature, ce qui fait que c' est plus verbeux !!

    Bon courage

Discussions similaires

  1. [Associé] Nouveau Concept] Cherche développeur PHP et/ou Ajax
    Par MoMoney dans le forum Autres
    Réponses: 0
    Dernier message: 12/05/2010, 19h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo